Jeyaseelan
Jeyaseelan

Reputation: 661

How to highlight a item in recycler view by position android

I am working on an application where I need a spinner if the user chooses some values from the spinner then I need to smooth scroll for that particular position and highlight the item of that position . I have done something for that I have a method that will highlight the position if the view is visible if the view is not visible it will not highlight. So, I am facing some issues like this.

This is the place where I get the position from the spinner

versesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        final int possition = (int) versesSpinner.getSelectedItemId();
        recyclerView.smoothScrollToPosition(possition);
        setBackgroundColor(possition);
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

And this is the method where I highlight the item

public void setBackgroundColor(int position) {
    for (int i = 0; i < versesList.size(); i++) {
        View view = mLayoutManager.findViewByPosition(i);
        try {
            if (view != null) {
                if (i == position)
                    view.setBackgroundColor(Color.parseColor("#504cbee7"));
                else
                    view.setBackgroundColor(Color.WHITE);
            }
        } catch (Exception e) {}
    }
}

Here the problem is while calling the setBackground() method before the smooth scroll method reaches that particular item.

The highlighting will be done only if the view is visible and if the view is not null.

Please tell me if there is any other way is there to achieve this else please tell me how can I find out if the smooth scroll to position has reached the particular item

I hope it make sense.

Upvotes: 0

Views: 1399

Answers (2)

Reaz Murshed
Reaz Murshed

Reputation: 24211

You might consider having a loom at my answer here to check how to highlight the items in your RecyclerView on demand. Now if you want a smooth scroll to the position highlighted just add smoothScrollToPosition(position) right after calling the notifyDataSetChanged() function.

So the highLightTheListItems() function might look like this which I'm referring from my answer there.

public void highLightTheListItems() {
    // Modify your list items. 

    // Call notifyDataSetChanged in your adapter
    yourAdapter.notifyDataSetChanged();

    // Now smooth scroll to the position you want.
}

Hope that helps.

Upvotes: 0

Nabin Bhandari
Nabin Bhandari

Reputation: 16409

You are trying to change the background of item before it has completed the scrolling. Use a handler to schedule that task after some time.

recyclerView.postDelayed(new Runnable(){
    public void run(){
        setBackgroundColor(possition);
    }
},1000);

Upvotes: 1

Related Questions