在 recyclerView 拖放后在 Room 中保存新位置
Save new positions in Room after recyclerView drag & drop
我在我的应用程序中实现了具有拖放功能的 recyclerView。一切正常,直到应用程序重新启动 - 任何拖放更改都不是应用程序saved/remembered。
我试过:
- 使用 SharedPreference + GSON
- 像这样在 SO 上阅读其他 SQLite 答案:在拖放后在 SQLite 中存储 RecyclerView 项目的新位置
- 阅读Paul Burke's Medium Post
我当前的代码如下所示:
在onCreate
ItemViewModel itemViewModel = ViewModelProviders.of(this).get(ItemViewModel.class);
itemViewModel.getAllItems().observe(this, new Observer<List<Item>>() {
@Override
public void onChanged(List<Item> items) {
adapter.setItemList(items);
itemList = items; //Global variable itemList
}
});
item为dragged/moved
时调用的方法
private void swap(int firstPosition, int secondPosition) {
Collections.swap(itemList, firstPosition, secondPosition);
for(int i = 0; i < itemList.size(); i++) {
Item currentItem = itemList.get(i);
ItemViewModel.update(currentItem );
}
adapter.notifyItemMoved(firstPosition, secondPosition);
}
有什么想法可以让我的应用程序在拖放后保存重新排序的 recyclerView 吗?提前致谢。
如果您希望在关闭您的应用程序或移动到另一个应用程序后保留项目的顺序 activity,您将需要向您的实体文件添加一个 属性,它将作为它的订单价值。添加后,您可以在重新排序项目时在 Collections.swap
方法中访问您的 dao 和 运行 UPDATE
SQL,而不是在每次加载列表时,return 属性.
订购的商品
我在我的应用程序中实现了具有拖放功能的 recyclerView。一切正常,直到应用程序重新启动 - 任何拖放更改都不是应用程序saved/remembered。
我试过:
- 使用 SharedPreference + GSON
- 像这样在 SO 上阅读其他 SQLite 答案:在拖放后在 SQLite 中存储 RecyclerView 项目的新位置
- 阅读Paul Burke's Medium Post
我当前的代码如下所示:
在onCreate
ItemViewModel itemViewModel = ViewModelProviders.of(this).get(ItemViewModel.class);
itemViewModel.getAllItems().observe(this, new Observer<List<Item>>() {
@Override
public void onChanged(List<Item> items) {
adapter.setItemList(items);
itemList = items; //Global variable itemList
}
});
item为dragged/moved
时调用的方法private void swap(int firstPosition, int secondPosition) {
Collections.swap(itemList, firstPosition, secondPosition);
for(int i = 0; i < itemList.size(); i++) {
Item currentItem = itemList.get(i);
ItemViewModel.update(currentItem );
}
adapter.notifyItemMoved(firstPosition, secondPosition);
}
有什么想法可以让我的应用程序在拖放后保存重新排序的 recyclerView 吗?提前致谢。
如果您希望在关闭您的应用程序或移动到另一个应用程序后保留项目的顺序 activity,您将需要向您的实体文件添加一个 属性,它将作为它的订单价值。添加后,您可以在重新排序项目时在 Collections.swap
方法中访问您的 dao 和 运行 UPDATE
SQL,而不是在每次加载列表时,return 属性.