Android 单击RecyclerView项目时,有几个项目会起作用
我使用Android 单击RecyclerView项目时,有几个项目会起作用,android,android-recyclerview,Android,Android Recyclerview,我使用RecycleView创建了一个列表。我想当点击其中一个项目时,该项目会起作用。但除此之外,其他几个项目也起作用。 我在onBindViewHolder中使用了setOnClickListener 我怎样才能解决这个问题 适配器类: public class adapter extends RecyclerView.Adapter<adapter.viewholder> { private List<MyListModel> myListModels; Cont
RecycleView
创建了一个列表。我想当点击其中一个项目时,该项目会起作用。但除此之外,其他几个项目也起作用。
我在onBindViewHolder
中使用了setOnClickListener
我怎样才能解决这个问题
适配器类:
public class adapter extends RecyclerView.Adapter<adapter.viewholder> {
private List<MyListModel> myListModels;
Context context;
public adapter(List<MyListModel> myListModels, Context context)
{
this.context=context;
this.myListModels = myListModels;
}
@NonNull
@Override
public adapter.viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
return new viewholder(view);
}
@Override
public void onBindViewHolder(@NonNull final adapter.viewholder holder, int position) {
MyListModel myListModel = myListModels.get(position);
holder.name.setText(myListModel.getName());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.relativeLayout.animate().alpha(1f).setDuration(700).start();
}
});
}
@Override
public int getItemCount() {
return myListModels.size();
}
class viewholder extends RecyclerView.ViewHolder {
TextView name;
RelativeLayout relativeLayout;
CardView cardView;
public viewholder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.products_list_name);
cardView = itemView.findViewById(R.id.products_list_cardview);
relativeLayout = itemView.findViewById(R.id.products_list_relativeLayout);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<MyListModel> myListModel = new ArrayList<>();
for(int i=0;i<=20;i++)
myListModel.add(new MyListModel("item "+i));
RecyclerView recyclerView=findViewById(R.id.Recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter Adapter = new adapter(myListModel,this);
recyclerView.setAdapter(Adapter);
}}
公共类适配器扩展了RecyclerView.adapterRecyclerView重用视图。这就是为什么会出现这个问题
在MyListModel
class中添加boolean b
变量,并在OnBindViewHolder中单击并设置此代码时设置为true
if(!b)
holder.relativeLayout.setVisibility(GONE);
else holder.relativeLayout.setVisibility(VISIBLE);
不要将onClick listener置于onBindViewHolder
上,因为它会将其设置为要绑定的每个值,每次滚动时内存使用都会增加,如果有大量数据,则应用程序会延迟,因此,在您想要的任何视图上设置viewholder
上的click listener,并在需要时使用界面传递值。按照Pemba提到的方法,在onBindViewHolder中设置click listener是不好的做法。相反,将clickListener放在viewHolder中,并相对于itemPosition设置项目动画。