RecyclerView添加Item onclickListener()+计时器优化

时间:2018-10-17 09:20:25

标签: android performance android-recyclerview

我想向我的RecyclerView中的项目添加onClickListener。我在Holder类中添加了侦听器,如下所示:

public class Holder extends RecyclerView.ViewHolder {

    TextView firstName;
    TextView lastName;

    public Holder (final View itemView) {
        super(itemView);
        firstName = itemView.findViewById(R.id.firstName );
        lastName= itemView.findViewById(R.id.lastName);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Do work
             }
        }
    }

但是,我认为这将导致列表的滚动有些生涩,并且在旧设备上尤其不能完全流畅。

问题1: 有更好的方法吗?或者如何优化代码?

问题2:  我打算为列表中的每个项目(例如计时器)添加一个动态变化的变量,并且我不想滚动太慢!我应该如何以最佳方式更新计时器?

2 个答案:

答案 0 :(得分:1)

为项目OnClickListener创建一个成员变量并将其设置在Holder的构造函数中。当应用程序运行时,它将是适配器中的一个侦听器。

答案 1 :(得分:1)

生涩滚动

由于您使用的是RecyclerView,所以我认为您不会遇到滚动问题,因为RecyclerView本质上是随ViewHolder Pattern一起提供的。 (如果使用的是简单的listView,则必须使ViewHolder避免滚动混乱)

代码改进

与其在ViewHolder中添加侦听器,不如在RecyclerView Adapter中将其设为Class变量。

有一种在RecyclerView中添加侦听器的标准方法

  

创建一个侦听器

interface ClickListener{

       void click();

}
  

将此监听器实现为您的活动

YourActivity implements ClickListener{

}
  

在您的适配器中键入此侦听器

YourAdapter extends RecyclerView.Adapter<YourAdapter.Holder>{

    ClickListener listener; 

    public YourAdapter(Context context)
    {
        this.context = context;

        listener = (ClickListener)context;
    }


    public class Holder extends RecyclerView.ViewHolder {

         TextView firstName;
         TextView lastName;

          public Holder (final View itemView) {
              super(itemView);
              firstName = itemView.findViewById(R.id.firstName );
              lastName= itemView.findViewById(R.id.lastName);

    }

    // Item Click listener goes here.

    @Override
    public void onBindViewHolder(DownLoadViewHolder holder, final int position) {
            // Do something
            listener.click(); 

      }

}

只给您概述。 您可以看到THIS供参考。