Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Focus lost on refresh in recyclerview

Tags:

android

guys I am developing android TV app so I used recyclerview horizontally and vertically and I used a method to refresh adapter of vertical recyclerview by using adapter.notifyDataSetChanged() but I am getting one problem. 1. It's focus is being gone and on press any D-pad key it is not working only right key is working 2. I used adapter.notifyItemRangeChanged(0, categoryDataList.size()) but I have still one problem that it's focus is going on first element of layout otherwise last of layout. So Please help me as soon as possible. Thanks in advance.

like image 358
ajay Avatar asked Oct 28 '16 06:10

ajay


2 Answers

Of course item will lose focus. Because no view to get focus when you refresh RecyclerView by calling method notify*Changed.

There is an imperfect way to keep focus in RecyclerView when you call notifyDatasetChanged().

  1. Override method getItemId(), give a stable id to each item:
    @Override public long getItemId(int position) { return position; }
  2. Set has StableId:
    adapter.setHasStableIds(true);
  3. Now basically you can keep focus in a concrete item when call notifyDatasetChange, if not, disable animator:
    mRecyclerView.setItemAnimator(null);

about stable id:Android: How to make an adapter with stable ids?
about disable animator:How to implement ItemAnimator of RecyclerView to disable the animation of notifyItemChanged
about the reason of step3 in google code:
https://code.google.com/p/android/issues/detail?id=204277

Good luck!

like image 143
RainFool Avatar answered Oct 19 '22 16:10

RainFool


Use

notifyItemRangeInserted(position,size); 

if you are inserting items.

like image 37
Mohammed Ibrahim Avatar answered Oct 19 '22 17:10

Mohammed Ibrahim