我想向我的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: 我打算为列表中的每个项目(例如计时器)添加一个动态变化的变量,并且我不想滚动太慢!我应该如何以最佳方式更新计时器?
答案 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供参考。