2017-03-14 2 views
-4

私は自分のアプリのためのシステムの一種のサインインを作成しています。ユーザーが詳細を追加してリストから選択できるようになっています。ListViewItemがクリックされたときに新しいアクティビティに移動

ユーザーはUserInputクラスに情報を入力し、この情報はFirebaseデータベースに保存されます。データはListView項目に表示されますが、まずCustomAdapterクラスに挿入されます。このクラスは私の問題を抱えています。

ユーザーは、setOnClickListener()を使用してこのリストビューとやりとりすることができます。私は、リストからアイテムが選択されたときにプログラムにトーストを表示させても問題はないことを示しています。私が今調べようとしているのは、ユーザーがlistview項目(名前と詳細を含む)をクリックするとすぐにMenu_Activity.javaというメインメニューアクティビティに移動するようにする方法です。

メッセージGradleの

Error:(71, 44) error: no suitable constructor found for Intent(<anonymous OnClickListener>,Class<Menu_Activity>) 
constructor Intent.Intent(String,Uri) is not applicable 
(argument mismatch; <anonymous OnClickListener> cannot be converted to String) 
constructor Intent.Intent(Context,Class<?>) is not applicable 
(argument mismatch; <anonymous OnClickListener> cannot be converted to Context) 
error:cannot find symbol method startActivity(Intent) 

CustomAdapter.java

package uk.ac.napier.newsreader.Details_UI; 

import android.content.Context; 
import android.content.Intent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

import uk.ac.napier.newsreader.Home_Screen_Activity; 
import uk.ac.napier.newsreader.Menu_Activity; 
import uk.ac.napier.newsreader.R; 
import uk.ac.napier.newsreader.Details_UserInput.User; 
import uk.ac.napier.newsreader.Routes_Activity; 

/** 
* Created by MarkB on 14/03/2017. 
*/ 

public class CustomAdapter extends BaseAdapter { 
    Context c; 
    ArrayList<User> users; 

    public CustomAdapter (Context c, ArrayList<User> users) { 
     this.c = c; 
     this.users = users; 
    } 

    @Override 
    public int getCount() { 
     return users.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return users.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView==null) 
     { 
      convertView = LayoutInflater.from(c).inflate(R.layout.model,parent,false); 
     } 

     TextView nameTxt = (TextView) convertView.findViewById(R.id.nameTxt); 
     TextView ageTxt = (TextView) convertView.findViewById(R.id.ageTxt); 
     TextView weightTxt = (TextView) convertView.findViewById(R.id.weightTxt); 

     final User u = (User) this.getItem(position); 

     nameTxt.setText(u.getName()); 
     ageTxt.setText(u.getAge()); 
     weightTxt.setText(u.getWeight()); 

     //ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //Toast.makeText(c,u.getName(), Toast.LENGTH_SHORT).show(); 

       Intent startMenuActivity = new Intent(this, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

     return convertView; 
    } 
} 

との意向を作成するときに問題が表示されます「(これ、Menu_Activityを構築。クラス);"ここ

Cannot resolve constructor 'Intent(anonymous android.view.View.OnClickListener, java.lang.Class<uk.ac.napier.newsreader.Menu_Activity>)' 
+0

を参照してくださいそれはあなたがあなたの活動内onItemClickListener呼び出すことができるインタフェースを持ち、その後のonClickメソッド内で、必要なビューのidのswitchステートメントを使用して置かれていますそこの意図。関連:http://stackoverflow.com/questions/18405299/onitemclicklistener-using-arrayadapter-for-listview –

答えて

0
Intent startMenuActivity = new Intent(c, Menu_Activity.class); 

cというエラーフラグを付けることはあなたのコンテキスト変数です。

説明:あなたは、最初の引数として活動コンテキストを渡すことになっている

0

これは私のアプリケーションの1つで使用したものです。

LocationAdapter adapter = new LocationAdapter(getApplicationContext(), R.layout.row, result); 
       //set the locationList (listview) to use adapter initialised above 
       locationList.setAdapter(adapter); 
       //Set up onClickListner 
       locationList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         //get the position of the row. So which row was clicked 
         LocationModel locationModel = result.get(position); 
         //initialise intent, this click event takes the user to locationDetails Activity 
         Intent intent = new Intent(ListActivity.this, LocationDetails.class); 
         //passing extra value. in this case passing of locationModel 
         intent.putExtra("locationModel", new Gson().toJson(locationModel)); 
         //start activity 
         startActivity(intent); 
        } 
       }); 
0

アダプタクラスでは、「this」はクラスオブジェクトをreturenしません。このため

//ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent startMenuActivity = new Intent(this, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

//ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent startMenuActivity = new Intent(c, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

Diference:

テントstartMenuActivity =新しいテント(この、Menu_Activityこのリストオブジェクト

listview.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent startMenuActivity = new Intent(MyActivity.this, Menu_Activity.class); 
      startActivity(startMenuActivity); 
     } 
    }); 
0

変更とOnItemClickListener設定 。クラス);

インテントstartMenuActivity = newインテント(c、Menu_Activity.class);

を忘れないでください:

は、あなたが匿名クラスにこのを「言う」とき、あなたは彼女(匿名オブジェクトクラス)ではなく、あなたの「メインクラス」に参照のうえされています。

は、リストビューの特典よりAnonymous Classes - Oracle Doc

関連する問題