2016-07-02 8 views
1

私はRecyclerViewを作成しましたが、アダプタではClickListenerを作成したいと考えています。私は、RecyclerViewの各項目をクリックした後に一意の応答を送信するようにしたい。言い換えれば、特定のRecyclerViewアイテムごとに異なるフラグメントがクリックされてロードされています。RecyclerView ClickListenerがタッチを認識しない

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


    private ArrayList<LatestPoll> mDataSet; 
    int lastPosition = -1; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     // each data item is just a string in this case 
     protected TextView pollQuestion; 
     protected ImageView pollImage; 
     protected RelativeLayout individualItem; 


     public ViewHolder(View v) { 
      super(v); 
      pollQuestion = (TextView) v.findViewById(R.id.latest_item_question); 
      pollImage = (ImageView) v.findViewById(R.id.pollThumbNailImage); 
      individualItem = (RelativeLayout) v.findViewById(R.id.individual_item); 
      individualItem.setOnClickListener(this); 



     } 

     @Override 
     public void onClick(View v) { 
      v.getId(); 
      int itemPosition = getLayoutPosition(); 
      String item = String.valueOf(mDataSet.get(itemPosition)); 
      Toast.makeText(getActivity().getApplicationContext(), item, Toast.LENGTH_LONG).show(); 
      Log.v("TESTING", "ITEM CLICKED!"); 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(ArrayList<LatestPoll> myDataset) { 
     mDataSet = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.latest_item, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     return new ViewHolder(v); 
    } 

    // Replace the contents of a view (invoked by the layout manager) 

    //The OutOfBoundsException is pointing here 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     Log.v("ON_BIND", "ON_BINDVIEWHOLDER CALLED"); 
     LatestPoll latestPoll = mDataSet.get(position); 
     holder.pollQuestion.setText(latestPoll.getQuestion()); 
     Picasso.with(getActivity()) 
       .load(latestPoll.getPollImage()) 
       .fit() 
       .placeholder(R.drawable.loading_spinnter_white) 
       .into(holder.pollImage); 

    } 
    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mDataSet.size(); 
    } 
} 

private void onLoad() { 
    if (mFragmentListener != null) { 
     mFragmentListener.onFragmentLoaded(); 
    } 
} 

public interface FragmentListener { 
    void onFragmentLoaded(); 
} 


} 
+0

だから、 'mRecyclerViewListener'は何ですか?あなたはそれが呼ばれていないと言っているのですか? – tachyonflux

+0

私は実際にコードを更新しました。私はgetLayoutPosition()からのIDがどこに生成されているのか把握しようとしています – tccpg288

答えて

-2

あなたはonBindViewHolder内部の親のレイアウトにonclickのリスナーを設定する必要があります。私はそれをログに記録しても、任意の運なしでトーストを追加したとして、今、RecyclerViewは、応答していません。

holder.parentID.setOnClickListener(mRecyclerViewListener); 
あなたのビューホルダーで

parentID = iteView.findViewById(R.id.parent); 
+0

RecyclerViewの個々の項目のparentIDはビューを表しますか? – tccpg288

+0

ええ、あなたの 'latest_item.xml'に定義されている親レイアウトのIDです –

+0

holder.IDを呼び出す方法はありません。それは今や許容されるコードです。 – tccpg288

関連する問題