RecycleView onClickListener - 在哪里补充? [英] RecycleView onClickListener - Where to add?
问题描述
我一直努力遵循以下指导来实现对RecyclerView的onClickListener
I've been trying to follow the following guide to implement an onClickListener on a RecyclerView
http://blog.lovelyhq.com /创建-名单与 - recyclerview功能于Android的部分-2 /
不过,我似乎无法得到任何上下文来调用setOnClickListener或为getPosition。
However, I can't seem to get any context to call setOnClickListener or getPosition.
下面是我的code(误差旁边有注释):
Here is my code (errors have comments next to them):
public class CategoryDataAdapter extends RecyclerView.Adapter<CategoryDataAdapter.DataViewHolder> implements View.OnClickListener
{
private List<CategoryData.Category> dataList;
private static Context con;
private ClickListener clickListener;
public CategoryDataAdapter(Context context, List<CategoryData.Category> list)
{
this.dataList = list;
con = context;
}
@Override
public int getItemCount()
{
return dataList.size();
}
@Override
public void onBindViewHolder(DataViewHolder dataViewHolder, int i)
{
CategoryData.Category item = dataList.get(i);
Picasso.with(con).load(item.getImage()).into(dataViewHolder.categoryImage);
dataViewHolder.categoryText.setText(item.getName());
}
@Override
public DataViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.tile_category, viewGroup, false);
DataViewHolder dvh = new DataViewHolder(itemView);
return dvh;
}
public static class DataViewHolder extends RecyclerView.ViewHolder
{
protected ImageView categoryImage;
protected TextView categoryText;
public DataViewHolder(View v)
{
super(v);
categoryImage = (ImageView) v.findViewById(R.id.categoryImage);
categoryText = (TextView) v.findViewById(R.id.categoryName);
v.setOnClickListener(this); // here, can't put in 'this'
}
}
public interface ClickListener
{
/**
* Called when the view is clicked.
*
* @param v view that is clicked
* @param position of the clicked item
* @param isLongClick true if long click, false otherwise
*/
public void onClick(View v, int position, boolean isLongClick);
}
public void setClickListener(ClickListener clickListener)
{
this.clickListener = clickListener;
}
@Override
public void onClick(View v)
{
clickListener.onClick(v, getPosition(), false); // here, get position
}
}
我能做些什么来解决这个问题?我只需要为整个视图点击监听器,而不是一个特定的项目(已经实施了)
What can I do to fix this? I only need a click listener for the entire view, not one particular item (already implemented that)
推荐答案
而不是让 RecyclerView.Adapter
实施 View.OnClickListener
,使 DataViewHolder
实施。随后还保存rootview你DataViewHolder变量(如ImageView的和的TextView),并在 onBindViewHolder
使用类似如下:
Instead of making RecyclerView.Adapter
implement View.OnClickListener
, make DataViewHolder
implement that. then also save the rootview at your DataViewHolder variable (like ImageView and TextView) and at onBindViewHolder
use something like below:
dataViewHolder.rootView.setOnClickListener(dataViewHolder);
这篇关于RecycleView onClickListener - 在哪里补充?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!