Skip to content Skip to sidebar Skip to footer

How To Highlight Selected Item In Recyclerview

I have used RecyclerView for showing thumbnails in my Image Editing app.Each item of its comprises of a ImageView(thumbnail) and a textView.In my application I want to highlight on

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)

    }
 }


 }

enter image description here

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"