2016-07-02 66 views
1

我創建了一個RecyclerView,並在適配器中我希望創建一個ClickListener。我希望RecyclerView中的每個項目在點擊後發送一個唯一的響應。換句話說,點擊正在爲每個特定的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

你需要監聽器中的onclick到onBindViewHolder裏面父佈局。

holder.parentID.setOnClickListener(mRecyclerViewListener); 

在你看來持有者

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

ParentID是否代表RecyclerView中單個項目的視圖? – tccpg288

+0

是的,它是在'latest_item.xml'中定義的父佈局的ID。 –

+0

沒有辦法調用holder.ID。它現在是一個允許的代碼片斷。 – tccpg288