我在应用程序中实现了一个带有拖放功能的recyclerView。在重新启动应用程序之前,一切都很好——应用程序不会保存/记住任何拖放更改。
我试过:
- 使用SharedPreference+GSON
- 在SO上阅读其他SQLite的答案,如下所示:在拖放后将RecyclerView项存储在SQLite中的新位置
- 阅读Paul Burke的Medium Post
我当前的代码如下:
In-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
}
});
拖动/移动项目时调用的方法
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);
}
有什么想法可以让我的应用程序在拖放后保存重新排序的回收器视图吗?提前谢谢。
如果您希望在关闭应用程序或转到另一个活动后保留项目的顺序,则需要向实体文件添加一个属性,该属性将作为其顺序值。添加后,您可以访问您的dao,并在重新排序项目时在Collections.swap
方法中运行UPDATE
SQL,返回按该属性排序的项目。