我是 Android 的新手,当我点击 RecyclerView 中的某个项目时,数据集被更改,但位置与 SQLite 中的 ID 不匹配,我很困惑。我知道我们可以使用“setHasStableId”来获取唯一的 ID,但是,我有些困惑:在哪里需要设置“setHasStableId(true)”条件?这是如何工作的?
我是 Android 的新手,当我点击 RecyclerView 中的某个项目时,数据集被更改,但位置与 SQLite 中的 ID 不匹配,我很困惑。我知道我们可以使用“setHasStableId”来获取唯一的 ID,但是,我有些困惑:在哪里需要设置“setHasStableId(true)”条件?这是如何工作的?
调用setHasStableIds(true)方法是为了将其应用于RecyclerView的适配器。
adapter.setHasStableIds(true);
同时,为了使其生效,您必须覆盖 getItemId(int position) 方法,以返回该位置处项目的已识别长整型。我们需要确保没有不同的项目数据具有相同的返回ID。
ID可以是来自数据库的ID,对于每个项目都是唯一的且不会更改。
//Inside the Adapter class
@Override
public long getItemId(int position) {
return itemList.get(position).getId();
}
这将减少数据集通知时的闪烁效果,仅修改具有更改的项目。
而且好消息是它会在项目位置更改时增加酷炫的动画效果!
setHasStableIds(true) :-
setHasStableIds(true);
。override getItemId(int position) :-
然后,我们必须覆盖getItemId(int position)
,返回标识长整型以标识位置上的项
我们需要确保没有不同的项目数据具有相同的返回ID。
针对新读者:
请注意,对于 Paging 3.0 库,稳定的 ID 是不必要的,因此也不被支持。
参考文献:https://developer.android.com/reference/kotlin/androidx/paging/PagingDataAdapter#getitemid