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-
public void onBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
if(selectedPosition==position)
holder.itemView.setBackgroundColor(Color.parseColor("#000000"));
else
holder.itemView.setBackgroundColor(Color.parseColor("#ffffff"));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(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"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:state_selected="true">
<shape>
<solid android:color="@color/lightPrimaryColor" />
</shape>
</item>
<item android:state_selected="false">
<shape>
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
recyclerview_item.xml (background_selector is set in android:background property)
<LinearLayout xmlns: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
class CalenderModel {
var date: String
var isselected: Boolean
constructor(date: String, isselected: Boolean) {
this.date = date
this.isselected = isselected
}
}
Create a Adapter CalenderAdapter name
class CalenderAdapter(
internal var activity: Activity,
internal var calenderModelList: ArrayList<CalenderModel>
) : RecyclerView.Adapter<CalenderAdapter.MyViewHolder>() {
var selected_defoult = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView: View
itemView =
LayoutInflater.from(parent.context).inflate(R.layout.item_calenderdate,
parent, false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(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()
}
}
}
override fun getItemCount(): Int {
return calenderModelList.size
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getItemViewType(position: Int): Int {
return position
}
inner class MyViewHolder
internal constructor(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
public class Type {
public int type; // 0-Original,1-Grayscale,2-Sepia.... same as enum
public int selected;
}
now in adapter
@Override
public void onBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
int typeOfItem = mDataSet.get(position).type
switch (mDataSet.get(position)) {
case 0:
holder.image.setImageResource(R.drawable.no_filter);
break;
case 1:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new GrayscaleTransformation())
.into(holder.image);
break;
case 2:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SepiaFilterTransformation(mContext))
.into(holder.image);
break;
case 3:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new ContrastFilterTransformation(mContext, 2.0f))
.into(holder.image);
break;
case 4:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new InvertFilterTransformation(mContext))
.into(holder.image);
break;
case 5:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new PixelationFilterTransformation(mContext, 20))
.into(holder.image);
break;
case 6:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SketchFilterTransformation(mContext))
.into(holder.image);
break;
case 7:
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;
case 8:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new BrightnessFilterTransformation(mContext, 0.5f))
.into(holder.image);
break;
case 9:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),
new float[]{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"