How To Highlight Selected Item In Recyclerview
Solution 1:
Just add this below line in bindView
holder.itemView.setBackgroundColor(Color.parseColor("#000000"));
will work for you.
if you want to highlight selected item just do like below
set it global
int selectedPosition=-1;
inside onBindViewHolder-
publicvoidonBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
if(selectedPosition==position)
holder.itemView.setBackgroundColor(Color.parseColor("#000000"));
else
holder.itemView.setBackgroundColor(Color.parseColor("#ffffff"));
holder.itemView.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
selectedPosition=position;
notifyDataSetChanged();
}
});
}
Solution 2:
Use background selector and set that in android:background property in the layout xml for the recyclerview item
background_selector.xml
<?xml version="1.0" encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_pressed="false"android:state_selected="true"><shape><solidandroid:color="@color/lightPrimaryColor" /></shape></item><itemandroid:state_selected="false"><shape><solidandroid:color="@android:color/transparent" /></shape></item></selector>
recyclerview_item.xml (background_selector is set in android:background property)
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/background_selector"android:orientation="vertical"android:paddingBottom="8dp"android:paddingLeft="16dp"android:paddingRight="16dp"android:paddingTop="8dp">
And then the place where you get the click event you can set it as selected with the View function
view.setSelected(true)
You would have to implement the logic for when you want to unselect/select the item by storing the position of selected items
Solution 3:
May be just use:
android:background="?attr/selectableItemBackground"
for root element at item xml?
Solution 4:
Create a Model CalenderModel name
classCalenderModel {
vardate: Stringvarisselected: Booleanconstructor(date: String, isselected: Boolean) {
this.date = date
this.isselected = isselected
}
}
Create a Adapter CalenderAdapter name
classCalenderAdapter(
internalvar activity: Activity,
internalvar calenderModelList: ArrayList<CalenderModel>
) : RecyclerView.Adapter<CalenderAdapter.MyViewHolder>() {
var selected_defoult = 0overridefunonCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView: View
itemView =
LayoutInflater.from(parent.context).inflate(R.layout.item_calenderdate,
parent, false)
return MyViewHolder(itemView)
}
overridefunonBindViewHolder(holder: MyViewHolder, position: Int) {
val list = calenderModelList.get(position)
holder.date_tv.text = Common.formateDate_calender_date(list.date)
holder.day_tv.text = Common.formateDate_calender_day(list.date)
if (position <= 3) {
if (list.isselected) {
holder.mLinearLayout.setBackgroundDrawable(
ContextCompat.getDrawable(
activity,
R.drawable.selected_calender_background_green
)
)
} else {
holder.mLinearLayout.setBackgroundDrawable(
ContextCompat.getDrawable(
activity,
R.drawable.selected_calender_background_gray
)
)
}
} else {
holder.mLinearLayout.setBackgroundDrawable(
ContextCompat.getDrawable(
activity,
R.drawable.selected_calender_background_gray_light
)
)
}
holder.itemView.setOnClickListener {
if (position <= 3) {
calenderModelList.get(selected_defoult).isselected = false
calenderModelList.get(position).isselected = true
selected_defoult = position
notifyDataSetChanged()
}
}
}
overridefungetItemCount(): Int {
return calenderModelList.size
}
overridefungetItemId(position: Int): Long {
return position.toLong()
}
overridefungetItemViewType(position: Int): Int {
return position
}
innerclassMyViewHolderinternalconstructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
val day_tv: TextView
val date_tv: TextView
val mLinearLayout: LinearLayout
init {
mLinearLayout = itemView.findViewById(R.id.mLinearLayout)
day_tv = itemView.findViewById(R.id.day_tv)
date_tv = itemView.findViewById(R.id.date_tv)
}
}
}
Solution 5:
update your enum to class first for flag
publicclassType {
publicint type; // 0-Original,1-Grayscale,2-Sepia.... same as enumpublicint selected;
}
now in adapter
@Override
publicvoidonBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
int typeOfItem = mDataSet.get(position).type
switch (mDataSet.get(position)) {
case0:
holder.image.setImageResource(R.drawable.no_filter);
break;
case1:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new GrayscaleTransformation())
.into(holder.image);
break;
case2:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SepiaFilterTransformation(mContext))
.into(holder.image);
break;
case3:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new ContrastFilterTransformation(mContext, 2.0f))
.into(holder.image);
break;
case4:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new InvertFilterTransformation(mContext))
.into(holder.image);
break;
case5:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new PixelationFilterTransformation(mContext, 20))
.into(holder.image);
break;
case6:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SketchFilterTransformation(mContext))
.into(holder.image);
break;
case7:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
.into(holder.image);
break;
case8:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new BrightnessFilterTransformation(mContext, 0.5f))
.into(holder.image);
break;
case9:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),
newfloat[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
.into(holder.image);
break;
default:
holder.image.setImageResource(R.drawable.no_filter);
break;
}
holder.title.setText(mDataSet.get(position).name());
if(mDataSet.get(position).selected == 0){
holder.title.setTypeface(null, Typeface.BOLD);
} else {
holder.title.setTypeface(null,Typeface.NORMAL);
}
}
not on every click or select update your list then call notifydatasetChanged() of adapter
Post a Comment for "How To Highlight Selected Item In Recyclerview"