是否有内置方法将listView的内容保存为onSaveInstanceState的一部分,然后再恢复?如果用户点击后退按钮并且现在再次调用onCreate,我希望listView看起来一样。
答案 0 :(得分:4)
如果您将活动的launchMode
设置为singleTask
,那么(除非应用程序被终止/ gc被调用),您的数据(列表)将被保留。
通过这种方式,您的设备一次只能保存一个正在运行的应用程序实例,所以当您“再次启动它”时,无论从哪里开始,如果它已经在后台运行,那么该实例将会显示(使用最新数据)。
如果您的应用程序存在风险,并且您仍需要显示最新的数据列表,则此解决方案将无法运行。
但您可以尝试SharedPreferences
:将当前数据保存到应用程序的SharedPreferences
,并在启动时从那里恢复。
如果没关系,要在应用程序的每个干净启动时都有预定义的新列表,但是当它进入前台时,你需要列表中最后看到的项目,你应该使用你的savedInstanceState
参数onCreate
方法:
private static final String MYLISTKEY = "myListLabels";
private ArrayList<String> listLabels = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState.containsKey(MYLISTKEY))
{
listLabels = savedInstanceState.getStringArrayList(MYLISTKEY);
}
else
{
// TODO: populate explicitely your list
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putStringArrayList(MYLISTKEY, listLabels);
}
其中listLabels
包含列表的标签。
它们不必是String
类型,您可以在Bundle
中添加任何类型。
答案 1 :(得分:0)
当用户点击后退按钮时,活动总是被销毁,因此不会从已保存的实例中恢复。
当您的活动因用户按下Back或活动自行完成而被销毁时,系统对该Activity实例的概念将永远消失,因为该行为表明不再需要该活动。