我有一个有三个页面的应用程序,其中一个是主页面。如果用户转到两个子页面之一,用户可以输入我想要保存的几个字段。我一直在研究onPause()和onSaveInstanceState()。我想我只想要对这两个问题做一个明确的解释,如果onPause()更好,那么代码的例子。这就是我对onSaveInstanceState()的看法。
protected void onSaveInstanceState(Bundle outState) {
// Save away the original text, so we still have it if the activity
// needs to be killed while paused.
outState.putDouble("quizPts",qpts);
outState.putDouble("quizV",qvalue);
outState.putDouble("tPts",tpts);
outState.putDouble("tValue", tvalue);
outState.putDouble("hPts", hpts);
这就是我设置bundle的方式,给它一个ID和一个值。
public void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
qpts = outState.getDouble("quizPts");
qvalue = outState.getDouble("quizV");
tpts = outState.getDouble("tPts");
tvalue = outState.getDouble("tValue");
hpts = outState.getDouble("hPts");
这是我计划如何撤销它,问题是我不明白如何通过Bundle来恢复它。我正在设置我需要回到设置到UI的变量的变量。
任何建议都会很棒
感谢初学者androider
答案 0 :(得分:1)
最佳选择是共享偏好。暂停是为了在应用暂停时因电话或其他事情而引起您的疑虑。但是,如果您使用共享首选项,它会为您提供保存数据的方法,如果保存的值不可用,则使用默认值恢复它。此数据将在用户会话中持续存在(即使您的应用程序被终止)。但是,如果您计划保存除原始数据类型之外的其他内容(如bool,int等),那么这不是一个好的选择。
请参阅http://developer.android.com/guide/topics/data/data-storage.html#pref
答案 1 :(得分:0)
您不需要自己传递包:Activity框架负责处理。使用onSaveInstanceState()
:如果系统因任何原因销毁了Activity类,它将被调用,所以你应该把你的逻辑放在那里。如果您离开您的活动,将始终调用onPause
,无论活动是否被销毁。
我还会在onRestoreInstanceState
中添加一张支票:
public void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
if(outState.containsKey("quizPts")) qpts = outState.getDouble("quizPts");
if(outState.containsKey("quizV")) qvalue = outState.getDouble("quizV");
if(outState.containsKey("tPts")) tpts = outState.getDouble("tPts");
if(outState.containsKey("tValue")) tvalue = outState.getDouble("tValue");
if(outState.containsKey("hPts")) hpts = outState.getDouble("hPts");