Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing background color of selected item in recyclerview

How to change the background color of only selected view in my recycle view example?only the background color of clicked itemview needs to be changed. Only one selected item must be displayed with background color change at a time and the rest needs to be as before selecting. here is my code :

MainActivity

public class MainActivity extends AppCompatActivity { RecyclerView rv1;     private  final String android_versions[]={                 "Donut",                 "Eclair",                 "Froyo",                 "Gingerbread",                 "Honeycomb",                 "Ice Cream Sandwich",                 "Jelly Bean",                 "KitKat",                 "Lollipop",                 "Marshmallow"     };     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initViews();     }      private  void initViews(){         rv1=(RecyclerView)findViewById(R.id.recyclerView1);         rv1.setHasFixedSize(true);         RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(getApplicationContext());         rv1.setLayoutManager(layoutManager);          RecyclerDataAdapter rda=new RecyclerDataAdapter(rv1,getApplicationContext(),android_versions);         rv1.setAdapter(rda);     } } 

RecyclerDataadapter

public class RecyclerDataAdapter extends RecyclerView.Adapter<RecyclerDataAdapter.ViewHolder> {  private String android_versionnames[];     private Context context1;      private RecyclerView mRecyclerView;       public RecyclerDataAdapter(RecyclerView recylcerView,Context context,String android_versionnames[]){         this.android_versionnames=android_versionnames;         this.context1=context; mRecyclerView=recylcerView;         setHasStableIds(true);         System.out.println("Inside dataadapter,Android names : \n ");         for(int i=0;i<android_versionnames.length;i++){             System.out.println("\n"+android_versionnames[i]);         }     }       @Override     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {         View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);         return new ViewHolder(view);     }      @Override     public void onBindViewHolder(final ViewHolder holder, int position) {         holder.tv1.setText(android_versionnames[position]);     }       @Override     public int getItemCount() {         return android_versionnames.length;     }       public class ViewHolder extends RecyclerView.ViewHolder {         private TextView tv1;         LinearLayout row_linearlayout;         RecyclerView rv2;          public ViewHolder(final View itemView) {             super(itemView);             tv1=(TextView)itemView.findViewById(R.id.txtView1);             row_linearlayout=(LinearLayout)itemView.findViewById(R.id.row_linrLayout);             rv2=(RecyclerView)itemView.findViewById(R.id.recyclerView1);             /*itemView.setBackgroundColor(0x00000000);//to transparent*/          }     } } 
like image 766
c0der Avatar asked Nov 19 '16 11:11

c0der


1 Answers

Finally, I got the answer.

public void onBindViewHolder(final ViewHolder holder, final int position) {         holder.tv1.setText(android_versionnames[position]);          holder.row_linearlayout.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 row_index=position;                 notifyDataSetChanged();             }         });         if(row_index==position){             holder.row_linearlayout.setBackgroundColor(Color.parseColor("#567845"));             holder.tv1.setTextColor(Color.parseColor("#ffffff"));         }         else         {             holder.row_linearlayout.setBackgroundColor(Color.parseColor("#ffffff"));             holder.tv1.setTextColor(Color.parseColor("#000000"));         }      } 

here 'row_index' is set as '-1' initially

public class ViewHolder extends RecyclerView.ViewHolder {         private TextView tv1;         LinearLayout row_linearlayout;         RecyclerView rv2;          public ViewHolder(final View itemView) {             super(itemView);             tv1=(TextView)itemView.findViewById(R.id.txtView1);             row_linearlayout=(LinearLayout)itemView.findViewById(R.id.row_linrLayout);             rv2=(RecyclerView)itemView.findViewById(R.id.recyclerView1);         }     } 
like image 105
c0der Avatar answered Sep 19 '22 17:09

c0der