在 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     

    }


}

最佳做法是在 RecyclviewViewHolder 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();

                }
            });
    }
}