在 recyclerview 中附加 onClickListener 的最佳位置
Best place to attach onClickListener in recyclerview
虽然我在看一些关于回收器的教程 view.some,但其中一些使用了 viewHolder 构造函数来附加 onClick 侦听器,而其中一些使用了 onBindViewHolder 方法。哪种方法是附加 onclicklistener 的最佳位置。我真的很困惑
每次将视图与数据绑定时都会调用方法 onBindViewHolder
。所以没有设置点击监听器的最佳位置。您不必为 View
设置多次 OnClickListener
。所以最好的解决办法是在onCreateViewHolder
方法中设置点击监听器。但重要的是你如何实现点击监听器。例如,如果你想从列表中获取一些模型,你可以使用 ViewHolder
中的 getAdapterPosition()
方法。
看例子
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
final View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.view_magazine_list_item, null);
final ViewHolder result = new ViewHolder(view);
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
YourObject yourobject = yourObjectsList.get(result.getAdapterPosition()));
}
});
return result;
}
在ViewHolder
是比较好的地方:
public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//views declare here
public ItemViewHolder(View convertView)
{
super(convertView);
... ...
convertView.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//do something to view here
//also you can get view position by 'getPosition()' here
}
}
最佳做法是在 Recyclview
的 ViewHolder
class 中使用 onClickListener
,如下所示:-
public class ViewHolder extends RecyclerView.ViewHolder{
private View YOUR_VIEW;
public ViewHolder(@NonNull View itemView) {
super(itemView);
YOUR_VIEW = itemView.findViewById(R.id.YOUR_VIEW);
YOUR_VIEW.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"Position==>> "+getAdapterPosition(),Toast.LENGTH_LONG).show();
}
});
}
}
虽然我在看一些关于回收器的教程 view.some,但其中一些使用了 viewHolder 构造函数来附加 onClick 侦听器,而其中一些使用了 onBindViewHolder 方法。哪种方法是附加 onclicklistener 的最佳位置。我真的很困惑
每次将视图与数据绑定时都会调用方法 onBindViewHolder
。所以没有设置点击监听器的最佳位置。您不必为 View
设置多次 OnClickListener
。所以最好的解决办法是在onCreateViewHolder
方法中设置点击监听器。但重要的是你如何实现点击监听器。例如,如果你想从列表中获取一些模型,你可以使用 ViewHolder
中的 getAdapterPosition()
方法。
看例子
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
final View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.view_magazine_list_item, null);
final ViewHolder result = new ViewHolder(view);
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
YourObject yourobject = yourObjectsList.get(result.getAdapterPosition()));
}
});
return result;
}
在ViewHolder
是比较好的地方:
public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//views declare here
public ItemViewHolder(View convertView)
{
super(convertView);
... ...
convertView.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//do something to view here
//also you can get view position by 'getPosition()' here
}
}
最佳做法是在 Recyclview
的 ViewHolder
class 中使用 onClickListener
,如下所示:-
public class ViewHolder extends RecyclerView.ViewHolder{
private View YOUR_VIEW;
public ViewHolder(@NonNull View itemView) {
super(itemView);
YOUR_VIEW = itemView.findViewById(R.id.YOUR_VIEW);
YOUR_VIEW.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"Position==>> "+getAdapterPosition(),Toast.LENGTH_LONG).show();
}
});
}
}