首页 > 解决方案 > 当用户选择单个项目时,RecyclerView 选择多个项目

问题描述

我创建了回收站视图并为其添加了许多元素,例如文本视图和图像视图,问题是当用户按下任何一个位置为它添加书签时,选择的项目很好,但我发现还有另一个项目自动添加书签是什么问题。

这是一个代码

public void onBindViewHolder(final ViewHolder holder, int position) {
  Get_Set_Note movie=moviesList.get(position); 
  holder.title.setText(movie.getTitle()); 
  holder.time.setText(movie.getTime());

  holder.imageView.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View v) { 

       holder.imageView.setImageResource(R.drawable.btn_star_big_on); 
     }
  });
}

https://drive.google.com/file/d/1bg2T3krPedlC6ue_sldk4X8zyW675EzV/view?usp=drivesdk

标签: javaandroidandroid-recyclerviewrecyclerview-layout

解决方案


这是您可以解决的方法

您需要添加Get_Set_Note一个布尔属性isFavorite

像这样

Get_Set_Note.java

Boolean isFavorite = false

只需在您的适配器中根据此条件设置您的星形图像

if(movie.isFavorite){
   holder.imageView.setImageResource(R.drawable.btn_star_big_on); 
 }else{
  holder.imageView.setImageResource(R.drawable.btn_star_big_off); 
}

在点击侦听器上,您可以设置布尔属性并通知适配器

holder.imageView.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View v) {
         if(movie.isFavorite){ 
              movie.isFavorite = false
         }else{
             movie.isFavorite = true  
         }
          notifyDataSetChanged()
     }
});

然后最后你bindViewHolder会是这样的

public void onBindViewHolder(final ViewHolder holder, int position) {
  Get_Set_Note movie=moviesList.get(position); 
  holder.title.setText(movie.getTitle()); 
  holder.time.setText(movie.getTime());

  if(movie.isFavorite){
    holder.imageView.setImageResource(R.drawable.btn_star_big_on); 
  }else{
    holder.imageView.setImageResource(R.drawable.btn_star_big_off); 
  }

  holder.imageView.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View v) {
         if(movie.isFavorite){ 
              movie.isFavorite = false
         }else{
             movie.isFavorite = true  
         }
          notifyDataSetChanged()
     }
  });
}

推荐阅读