Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 我是否应该设置ReyclerView的OnClickListener';OnBindViewHolder()方法中的项目?_Java_Android_Android Recyclerview_Onclicklistener - Fatal编程技术网

Java 我是否应该设置ReyclerView的OnClickListener';OnBindViewHolder()方法中的项目?

Java 我是否应该设置ReyclerView的OnClickListener';OnBindViewHolder()方法中的项目?,java,android,android-recyclerview,onclicklistener,Java,Android,Android Recyclerview,Onclicklistener,我有一个RecyclerView,每秒更新30次它的项目。现在我的问题是: 如果我在onBindViewHolder(final ViewHolder,int position)方法中设置每个项目的OnClickListner,30View。每秒将创建OnClickListner对象。这会不会引起问题?谢谢 @Override public void onBindViewHolder(final ViewHolder holder, int position) { holder

我有一个
RecyclerView
,每秒更新30次它的项目。现在我的问题是:

如果我在
onBindViewHolder(final ViewHolder,int position)
方法中设置每个项目的OnClickListner,30
View。每秒将创建OnClickListner
对象。这会不会引起问题?谢谢

  @Override
  public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.root.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //do something
      }
    });
  }

以下是一个很好的资源:


你可以使用
onBindViewHolder
设置可点击,它就可以工作了

像这个案子

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(mContext, NextModel.class);
            mContext.startActivity(intent);
        }
    });
}

在中为RetcyView的项实现
View.OnClickListener
的方法非常好。它还管理项目选择。

是的,您可以。但这不是一个好的做法。您可以在
ViewHolder
中设置单击侦听器,您有
getAdapterPosition()
可以帮助您获取当前单击的项目。(可能是您需要传递项目或其他内容)。
有关更多信息,请参见

,它将导致内存泄漏。您可以创建onClickListener接口并实现它。不要在
onBindViewHolder
中实现,而是在viewholder中实现它。错误的做法是,避免提供上下文并从适配器启动活动。更好地实现@Manzurul-Hoque-Rumi answer的mclicklinklistener这就像我的第一个代码一样,正如@Manzurul-Hoque-Rumi所说,这将导致内存泄漏。
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(mContext, NextModel.class);
            mContext.startActivity(intent);
        }
    });
}