Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在recyclerview中连接onClickListener的最佳位置_Android_Onclicklistener_Android Recyclerview - Fatal编程技术网

Android 在recyclerview中连接onClickListener的最佳位置

Android 在recyclerview中连接onClickListener的最佳位置,android,onclicklistener,android-recyclerview,Android,Onclicklistener,Android Recyclerview,当我在看一些关于recycler视图的教程时,其中一些使用viewHolder构造函数来附加onClick侦听器,而一些使用onBindViewHolder方法。哪种方法是连接onclicklistener的最佳位置。我真的很困惑每次用数据绑定视图时都会调用方法onBindViewHolder。因此,没有设置click listener的最佳位置。对于一个视图,不必多次设置OnClickListener。因此,最好的解决方案是在onCreateViewHolder方法中设置click liste

当我在看一些关于recycler视图的教程时,其中一些使用viewHolder构造函数来附加onClick侦听器,而一些使用onBindViewHolder方法。哪种方法是连接onclicklistener的最佳位置。我真的很困惑

每次用数据绑定视图时都会调用方法
onBindViewHolder
。因此,没有设置click listener的最佳位置。对于一个
视图
,不必多次设置
OnClickListener
。因此,最好的解决方案是在
onCreateViewHolder
方法中设置click listener。但重要的是如何实现点击侦听器。例如,如果您想从列表中获取一些模型,可以使用
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     

    }


}

recycleview
ViewHolder
类中使用
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();

                }
            });
    }
}

getPosition()
现在已被弃用。@BaselShishani谢谢