我使用listView并希望从我离开的地方恢复/恢复listView项目/状态(即使在app关闭后)。 为此,我使用
Parcelable state = listView.onSaveInstanceState();
listView.onRestoreInstanceState(state);
它需要 Parcelable 类型数据作为参数。 如果用户没有关闭应用程序,它可以完美地工作(使用静态变量)。 但我希望将此州数据保存到 SharedPreferences 中,这有助于用户在关闭应用后恢复listView。
我不知道如何将此州数据存储到SharedPreferences中。请帮我解决这个问题。
我也试过这个解决方案 How Android SharedPreferences save/store object 但它并没有解决我的问题。该应用程序正在崩溃
Parcelable obj = gson.fromJson(json, Parcelable.class);
所以,请不要复制我的问题,如果你知道解决方案只是回答它。
答案 0 :(得分:0)
我假设您的列表视图具有一个包含所需数据的适配器,因此您可以将该数据保存在某个位置(例如,在共享首选项中),而不是整个视图的可打包区域,例如如果您的适配器数据是ArrayList<ModelA>
,则可以执行以下操作:
if ( listview.getAdapter() instanceof MyAdapter){
MyAdapter adapter = (MyAdapter) listview.getAdapter();
SharedPreferences.Editor editor = prefs.edit();
editor.putString( "adapterdata" , gson.toJson(adapter.getData()));
editor.commit(); //or editor.apply()
}
以及何时要检索数据
String dataJson = prefs.getString( "adapterdata" , "");
ArrayList<ModelA> data = gson.fromJson( dataJson, new TypeToken<ArrayList<ModelA>>(){}.getType());
if ( data != null ){
//set data to your listview, also it's logical to delete retrieved data from sharedpreferences
SharedPreferences.Editor editor = prefs.edit();
editor.remove("adapterdata");
editor.commit();
}