在recyclerview中重点关注刷新

时间:2016-10-28 06:43:50

标签: android

我正在开发Android TV应用程序所以我在水平和垂直方向上使用了recyclelerview,并且我使用了一个方法来使用adapter.notifyDataSetChanged()来刷新垂直recyclerview的适配器但是我遇到了一个问题。 1.它的重点是消失,按下任何D-pad键它不能正常工作 2.我使用了adapter.notifyItemRangeChanged(0,categoryDataList.size())但我还有一个问题,即它的重点是布局的第一个元素,否则布局的最后一个元素。 所以请尽快帮助我。 提前谢谢。

2 个答案:

答案 0 :(得分:10)

当然你会失去焦点。因为当您通过调用方法通知*已更改刷新RecyclerView时,没有视图可以获得焦点。

当您调用方法notifyDatasetChanged()时,我有一种不完美的方法可以将焦点保持在RecyclerView中。

  1. 覆盖方法getItemId(),为每个项目提供一个稳定的id:
    @Override public long getItemId(int position) { return position; }
  2. 设置有StableId:
    adapter.setHasStableIds(true);
  3. 现在基本上你可以在调用notifyDatasetChange时将焦点保持在具体项目中,如果没有,禁用动画师:
    mRecyclerView.setItemAnimator(null);
  4.   

    关于稳定身份证:Android: How to make an adapter with stable ids?
      关于禁用动画师:How to implement ItemAnimator of RecyclerView to disable the animation of notifyItemChanged
      关于google代码中step3的原因:
      https://code.google.com/p/android/issues/detail?id=204277

    祝你好运!

答案 1 :(得分:1)

使用 notifyItemRangeInserted(位置,大小); 如果你要插入物品。