2011-05-15 42 views

回答

4

如果您将活动的launchMode设置为singleTask,那么(除非应用程序被终止/ gc被调用),您的数据(列表)将被保留。

这样,您的设备一次只能保存一个应用程序的运行实例,所以当您“再次启动”时,无论从哪里运行,如果它已经在后台运行,那么该实例将显示最新数据)。

如果您的应用程序已完成并且仍需要显示最新的数据列表,则此解决方案将无法工作。
但是,您可以试试SharedPreferences:将当前数据保存到应用程序的SharedPreferences,并在启动时从该处恢复。

如果没关系,要在应用程序的每个干净启动时都有预定义的新列表,但是当它进入前台时,需要列表中最后一次出现的项目,则应使用onCreate方法的savedInstanceState参数:

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中放置任何类型。

+0

当他们击中后退按钮时,它似乎被销毁... onCreate被再次调用。我已经尝试过这种改变,但没有奏效。这听起来是对的吗? – corbin 2011-05-15 19:30:14

+0

这可能是因为您在'onCreate'方法中明确填充了您的列表。请参阅我的更新,以在您的活动的“onCreate”中使用'savedInstanceState'。 – rekaszeru 2011-05-15 19:57:55

+0

当用户点击后退按钮时,onSaveInstanceState似乎不会被调用。它似乎只在活动暂停时才被调用,而不是被杀死。所以,我认为我已经使用了更持久的东西。原因是,用户投诉是他们点击后退按钮,然后他们后来重新启动应用程序,并且列表视图不再有其内容。 – corbin 2011-05-18 05:22:33

0

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

Android Training

因为当用户按下后退或活动完成本身的活性被破坏,因为行为表明活动不再需要的活动实例的系统的概念已经一去不复返了。