Focus lost on refresh in recyclerview

2020-06-17 05:58发布

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.

标签: android
2条回答
乱世女痞
2楼-- · 2020-06-17 06:44

use notifyItemRangeInserted(position,size); if you are inserting items.

查看更多
Summer. ? 凉城
3楼-- · 2020-06-17 06:56

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

I have an imperfect way to keep focus in RecyclerView when you call method 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!

查看更多
登录 后发表回答