Android 在第一个索引处添加项目并调用notifydatasetchange后,如何在RecyclerView中保持滚动位置

Android 在第一个索引处添加项目并调用notifydatasetchange后,如何在RecyclerView中保持滚动位置,android,android-listview,android-recyclerview,Android,Android Listview,Android Recyclerview,我正在使用RecyclerView,在第一个项目之前添加项目,滚动位置向上移动到新添加的第一个项目。在第一个索引处添加新项目并调用notifydatasetchange()后,如何保持滚动位置 这就是我在适配器中所做的 mCurrentFragment.items.addAll(0, createLineItems(dataArrayList)); notifyDataSetChanged(); 有什么建议吗 有两种选择: 使用更复杂版本的通知 List newData =

我正在使用RecyclerView,在第一个项目之前添加项目,滚动位置向上移动到新添加的第一个项目。在第一个索引处添加新项目并调用
notifydatasetchange()
后,如何保持滚动位置

这就是我在适配器中所做的

    mCurrentFragment.items.addAll(0, createLineItems(dataArrayList));

    notifyDataSetChanged();
有什么建议吗

有两种选择:

  • 使用更复杂版本的
    通知

    List newData = createLineItems(dataArrayList);
    mCurrentFragment.items.addAll(0, newData);
    notifyItemRangeInserted(0, newData.size());
    
  • 使用稳定的ID。在适配器上重写
    public long getItemId(int位置)
    ,使其返回有意义的值,并调用
    sethasstableId(true)在上面


  • 你可以根据你插入的物品数量来计算,然后手动设置滚动值。我会试试的,thx@Budius你说有意义是什么意思?这是否意味着每个物品都有一个唯一的id?@HamzehSoboh我的意思就是这个。如果您的ID只是位置(例如),它将不起作用。它必须是(例如)用户ID或照片ID,因此,当视图位置更改时,ID仍然绑定到它所处理的数据
    notifyItemRangeInserted
    ,而不是
    setHassTableID
    ,尽管
    getItemId
    为该项目的日期返回了
    getTime()
    ,这是唯一的。