【发布时间】:2016-12-20 14:31:00
【问题描述】:
我想在我的 android 应用程序中有一个全局 ArrayList 变量,我只是想知道如何在应用程序完成时保存这个片段列表,并在应用程序重新启动时获取相同的 ArrayList?
【问题讨论】:
标签: android serialization arraylist
我想在我的 android 应用程序中有一个全局 ArrayList 变量,我只是想知道如何在应用程序完成时保存这个片段列表,并在应用程序重新启动时获取相同的 ArrayList?
【问题讨论】:
标签: android serialization arraylist
为每个Fragment 分配一个ID,并将ID 列表保存到SharedPreferences。当您重新启动应用程序时,按照您保存到 SharedPreferences 的 id 的顺序填充/显示 Fragments。
如何将ArrayList 写入/读取SharedPreferences:https://stackoverflow.com/a/22985657/5250273
【讨论】:
您应该在您的应用程序被 android 杀死之前存储数组列表。当您的应用程序启动时,您的应用程序应该加载数据。
让我再解释一下。 在此实施之前,我认为您应该检查fragment's lifecycle。
onSaveInstaceState() 方法在 onPause() 之前调用(在片段被杀死之前)。所以你应该用这种方法保存你的数据。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Storing my arraylist on bundle
outState.putStringArrayList("savedList", list);
}
要加载您的数据,实际上有一个 OnRestoreInstanceState() 方法在 onCreate() 之后(在创建新活动之前)为活动调用。但是,片段没有 OnRestoreInstanceState() 生命周期方法。因此,您可以使用 onCreate()、onCreateView() 或 onActivityCreated() 方法来加载您的日期。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null){
// Loading my arraylist
list=savedInstanceState.getStringArrayList("savedList");
}
storing data on android 有很多选择。
您应该下定决心选择保存日期的方式。
希望对你有所帮助。
【讨论】: