Android:保存listview onSaveInstanceState的内容

时间:2011-05-15 19:03:29

标签: android listview

是否有内置方法将listView的内容保存为onSaveInstanceState的一部分,然后再恢复?如果用户点击后退按钮并且现在再次调用onCreate,我希望listView看起来一样。

2 个答案:

答案 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)

当用户点击后退按钮时,活动总是被销毁,因此不会从已保存的实例中恢复。

Android Training

  

当您的活动因用户按下Back或活动自行完成而被销毁时,系统对该Activity实例的概念将永远消失,因为该行为表明不再需要该活动。