2016-08-11 8 views
1

レイアウトに複数のカードビューがあります。クリックするとListenerのonClickメソッドが呼び出され、EquationsActivityが開始され、カードの位置が渡されます。それは動作していません。私のrecyclerFragmentはtablayoutにあります。私は見て見て、私は問題を把握することができない!すべての提案は高く評価されています!リサイクラービューのカードビューでリスナーインターフェイスがonClickと連携していません

マイrecyclerAdapter:

public class recylcerAdapter extends  RecyclerView.Adapter<recylcerAdapter.ViewHolder> { 

    private Listenerr listener; 
    private int[] imageIds; 
    private String[] nameArray; 



    public interface Listenerr{ 

     void onClick(int position); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder{ 


     private CardView cardView; 

     public ViewHolder(CardView v){ 
      super(v); 
      cardView = v; 

     } 
    } 


    public recylcerAdapter(Context context, String title, Cursor cursor, int[]imageIds, String[]nameArray){ 

     this.imageIds = imageIds; 
     this.nameArray = nameArray; 
    } 

    public void setListener(Listenerr listener){ 
     this.listener = listener; 
    } 

    @Override 
    public recylcerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
     //create a new view 
     CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false); 
     return new ViewHolder(cardView); 

    } 
    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position){ 
     //set the values inside the given view 

     CardView cardView = holder.cardView; 
     ImageView imageView = (ImageView) cardView.findViewById(R.id.list_icon); 
     Drawable drawable = cardView.getResources().getDrawable(imageIds[position]); 
     imageView.setImageDrawable(drawable); 
     imageView.setContentDescription(nameArray[position]); 
     TextView textView = (TextView) cardView.findViewById(R.id.card_text); 
     textView.setText(nameArray[position]); 

     cardView.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       if(listener != null){ 
        Log.v("hitsOnClick", "It has been hit"); 
        listener.onClick(position); 

       } 
      } 
     }); 
    } 

    @Override 
    public int getItemCount(){ 
     //return number of items in the data set 
     return nameArray.length; 
    } 
} 

マイリサイクルフラグメントコード:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    new listPop().execute(); 
    RecyclerView recyclerView = (RecyclerView) inflater.inflate(R.layout.recylcler_layout, container, false); 


    recylcerAdapter RecylcerAdapter = 
      new recylcerAdapter(getActivity(), "Geometry", cursor, imageArray, names.toArray(new String[names.size()])); 
    LinearLayoutManager manager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(manager); 
    recyclerView.setAdapter(RecylcerAdapter); 

    RecylcerAdapter.setListener(new recylcerAdapter.Listenerr() { 
     @Override 
     public void onClick(int position) { 
      Intent intent = new Intent(getActivity(), EquationsActivity.class); 
      intent.putExtra(EquationsActivity.POSITION, position); 
      getActivity().startActivity(intent); 

     } 
    }); 

    return recyclerView; 
} 

EDIT: もっと見てと私はカードをタップしたときに、onbindviewholder中のonClickではないことを発見しましたヒットした。

答えて

0

レッツ・セットアップクリックリスナー新しいビューホルダー作成:

public static class ViewHolder extends RecyclerView.ViewHolder{ 
    CardView cardView; 
    ImageView imageView; 
    TextView textView; 

    public ViewHolder(CardView v){ 
     super(v); 
     cardView = v; 
     imageView = (ImageView) cardView.findViewById(R.id.list_icon); 
     textView = (TextView) cardView.findViewById(R.id.card_text); 
    } 
} 

と結合して作成するときに少し変更します。

非静的フィールド「リスナーが」から参照することはできません
@Override 
public recylcerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
    //create a new view 
    final CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false); 
    cardView.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       if(listener != null){ 
        Log.v("hitsOnClick", "It has been hit"); 
        listener.onClick((int)cardView.getTag()); 

       } 
      } 
     }); 
    return new ViewHolder(cardView); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, final int position){ 
    //set the values inside the given view 

    Drawable drawable = holder.cardView.getResources().getDrawable(imageIds[position]); 
    holder.imageView.setImageDrawable(drawable); 
    holder.imageView.setContentDescription(nameArray[position]); 
    holder.textView.setText(nameArray[position]); 

    holder.cardView.setTag(position); 
} 
+0

を静的コンテキストこのエラーは、新しいビューホルダーを作成する場所で発生します。どのようにそれを修正する上で任意のアイデア? –

+0

プライベートListenerリスナーを静的にして、それを実行しても、クリックがまだ機能しませんでした。 –

+0

^^^^これらのコメントの問題を修正できますか?^ @anhtuannd –

関連する問題