获取点击的项目及其在 RecyclerView 中的位置 [英] Get clicked item and its position in RecyclerView
问题描述
我正在用 RecyclerView
替换我的 ListView
,列表显示正常,但我想知道如何获取被点击的项目及其位置,类似于方法 OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
我们在 ListView
中使用.
I am replacing my ListView
with RecyclerView
, list showing ok, but I would like to know how to get clicked item and its position, similar to the method OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
we use in ListView
.
感谢您的想法!
推荐答案
基于链接:为什么 RecyclerView 没有 onItemClickListener()?以及 RecyclerView 与 Listview 有何不同?,还有@Duncan 的总体思路,我在这里给出我的解决方案:
Based on the link: Why doesn't RecyclerView have onItemClickListener()? and How RecyclerView is different from Listview?, and also @Duncan's general idea, I give my solution here:
定义一个接口
RecyclerViewClickListener
,用于将消息从适配器传递到Activity
/Fragment
:
Define one interface
RecyclerViewClickListener
for a passing message from the adapter toActivity
/Fragment
:
public interface RecyclerViewClickListener {
public void recyclerViewListClicked(View v, int position);
}
在Activity
/Fragment
中实现接口,并将监听器传递给适配器:
In Activity
/Fragment
implement the interface, and also pass listener to adapter:
@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());
}
}
}
经过测试,一切正常.
[更新]
自 API 22 起,RecyclerView.ViewHolder.getPosition()
已被弃用,因此使用 getLayoutPosition()
.
Since API 22, RecyclerView.ViewHolder.getPosition()
is deprecated, so instead with getLayoutPosition()
.
这篇关于获取点击的项目及其在 RecyclerView 中的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!