2013-03-22 130 views
3

我正在开发一个应用程序,其中我重写了后退按钮。我创建了一个复选框。在点击其中我打电话的意图为:Android:onSaveInstanceState返回按钮

startActivityforResult(); 

而且还保持活动的状态为:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("checkbox", checkbox.isChecked()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    checkbox_state = savedInstanceState.getBoolean("checkbox"); 
} 

其运行正常,并保持该状态。 意思是我在编辑文本中输入值。然后在复选框中单击调用结果的新活动,并在首次活动返回时保持状态。

现在,但从第二个活动,如果我点击设备后退按钮状态不维护。

那么我应该怎么做才能保持后退按钮的状态。我搜索但没有找到满意的解决方案。请建议我。

回答

2

当您开始新的活动时,当前活动将被隐藏,并且新的活动被放置在堆栈顶部。现在,如果你按下新Activity上的后退按钮,那么第一个活动应该以当前状态出现(如果它没有被销毁,则调用finish())它留在哪里,即如果复选框被选中,则它应该保留检查。除非方向改变或活动被破坏,否则不需要保存活动状态。

你确定你没有在onActivityResult或onResume()方法中做任何事情,这会影响复选框的状态吗?我建议首先注释掉这两种方法中的所有代码,然后查看您的复选框是否保留了状态。你也可以确保代码本身不会在启动新的Activity之前取消选中复选框吗?

+0

我在activity2中的编辑文本中输入了一些数据,并通过intent捕获了activity1中的数据。 – 2013-03-22 12:40:30

1

现在,但从第二项活动,如果我点击设备后退按钮状态不维护。

onSaveInstanceState()主要用于配置更改(例如旋转屏幕)。

所以,我应该怎么做,以保持后退按钮

最有可能的,没有“国家”,这需要“维护”,你的数据模型外的状态。您的活动需要更新其数据模型:文件,数据库,首选项,ContentProvider,某些单身是您的内存数据模型管理器,无论如何。

+0

可以说我有一个ListView,我从数据库中填充。你认为每当我从其他活动导航回数据库时,我都应该从数据库填充它?或者我应该保持适配器内容保存在状态并重用它?就像知道你的承担:) – 2013-05-02 15:16:06

+0

@ΕГИІИО:从数据库填充是最安全的,因为数据可能已经改变,因为活动是上次。将它保存在状态是最糟糕的选择。中间地带是维护某种数据模型管理单例,它可以缓存信息,并且是* all *活动对数据模型的访问点。 – CommonsWare 2013-05-02 15:24:14

+0

它是最糟糕的,因为它浪费资源?如果你知道在这两个活动之间导航时数据没有得到更新,那么从状态中恢复它会不会更响应?因为我讨厌在我的导航或当我旋转屏幕时看到'loading please wait ...'东西:) – 2013-05-02 15:37:22