如何在回收视图中使用OnClickListener?

我基本上试图做的是让回收视图中显示的对象可点击到某个TextView ID,因为我正在制作一个程序,在列表中显示一个专辑封面和它的标题。 我需要能够点击回收站视图中的每一个框,当点击其他信息(作者,发布date,点击歌曲等)时,popup一个TextView,然后返回button(如果可能)返回到专辑列表。 我一直在看这个小时,不能弄清楚如何使OnclickListener为它工作。 如果你知道如何或有任何build议,很高兴听到他们。 谢谢!

package com.albumlist.albumlist; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private AlbumData[] itemsData; public MyAdapter(AlbumData[] itemsData){ this.itemsData = itemsData; } public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private TextView txtViewTitle; private ImageView imgViewIcon; public ViewHolder(View itemLayoutView) { super(itemLayoutView); itemLayoutView.setOnClickListener(this); txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.album_title); imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.album_icon); } @Override public void onClick(View v) { } } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { View itemLayoutView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.data_layout, null); ViewHolder viewHolder = new ViewHolder(itemLayoutView); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { viewHolder.txtViewTitle.setText(itemsData[position].getTitle()); viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl()); } @Override public int getItemCount() { return itemsData.length; } } 

Solutions Collecting From Web of "如何在回收视图中使用OnClickListener?"

Xaver Kapeller在这个评论中概括了这个概念。 如果您正在寻找一种简单的方式来pipe理您的RecyclerView交互,类似于传统的ListView交互,请在GitHub上查看BigNerdRanch的recyclerview-multislect库。 他们有一个示例应用程序,您可以探索,它实现了一系列的OnClickListenersOnLongClickListeners增加了多选function。

下面是BigNerdRanch在一个Adapter和一个ViewHolderFragment实现监听器的一个Fragment ,在这个例子中,它实际上是库自己的ViewHolder的扩展SwappingHolder.

 public CrimeHolder(View itemView) { super(itemView, mMultiSelector); mTitleTextView = (TextView) itemView.findViewById(R.id.crime_list_item_titleTextView); mDateTextView = (TextView) itemView.findViewById(R.id.crime_list_item_dateTextView); mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.crime_list_item_solvedCheckBox); itemView.setOnClickListener(this); itemView.setLongClickable(true); itemView.setOnLongClickListener(this); } public void bindCrime(Crime crime) { mCrime = crime; mTitleTextView.setText(crime.getTitle()); mDateTextView.setText(crime.getDate().toString()); mSolvedCheckBox.setChecked(crime.isSolved()); } @Override public void onClick(View v) { if (mCrime == null) { return; } if (!mMultiSelector.tapSelection(this)) { selectCrime(mCrime); } } @Override public boolean onLongClick(View v) { ((AppCompatActivity) getActivity()).startSupportActionMode(mDeleteMode); mMultiSelector.setSelected(this, true); return true; } } private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> { @Override public CrimeHolder onCreateViewHolder(ViewGroup parent, int pos) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_crime, parent, false); return new CrimeHolder(view); } @Override public void onBindViewHolder(CrimeHolder holder, int pos) { Crime crime = mCrimes.get(pos); holder.bindCrime(crime); Log.d(TAG, "binding crime" + crime + "at position" + pos); } @Override public int getItemCount() { return mCrimes.size(); } }