我将ListView
替换为RecyclerView
,列表显示为ok,但我想知道如何获取被点击的项目及其位置,类似于我们在OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
中使用的 ListView
方法。
感谢您的想法!
最佳答案
基于链接:Why doesn't RecyclerView have onItemClickListener()? and How RecyclerView is different from Listview?,还有@Duncan的一般想法,我在这里给出我的解决方案:
RecyclerViewClickListener
/Activity
的传递消息定义一个接口(interface)Fragment
: public interface RecyclerViewClickListener {
public void recyclerViewListClicked(View v, int position);
}
Activity
/Fragment
中实现接口(interface),并将监听器传递给适配器: @Override
public void recyclerViewListClicked(View v, int position){... ...}
//set up adapter and pass clicked listener this
myAdapter = new MyRecyclerViewAdapter(context, this);
Adapter
和ViewHolder
中: public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ItemViewHolder> {
... ...
private Context context;
private static RecyclerViewClickListener itemListener;
public MyRecyclerViewAdapter(Context context, RecyclerViewClickListener itemListener) {
this.context = context;
this.itemListener = itemListener;
... ...
}
//ViewHolder class implement OnClickListener,
//set clicklistener to itemView and,
//send message back to Activity/Fragment
public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
... ...
public ItemViewHolder(View convertView) {
super(convertView);
... ...
convertView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
itemListener.recyclerViewListClicked(v, this.getPosition());
}
}
}
经过测试,它工作正常。
[ UPDATE ]
从API 22开始,不推荐使用
RecyclerView.ViewHolder.getPosition()
,因此不推荐使用getLayoutPosition()
。关于android - 获取点击的项目及其在RecyclerView中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28296708/