2012-11-20 23 views
1

嗨,
我有一些微调对象,当选中时,更改EditText和一个按钮的内容。所有工作正常,直到我打开和关闭屏幕。
我使应用程序的方向仅限于横向,因此打开和关闭屏幕会导致活动被破坏。在恢复应用程序状态后,不需要的onItemSelected调用

这里发生的问题是我失去了Spinner,EditText和Button对象的所有状态信息。
所以我试图用onSaveInstanceStateonRestoreInstanceState方法来解决这个问题,方法是按顺序设置Spinner,Button和EditText的状态。
问题在于,由于某种原因,我在恢复Button和EditText的状态后调用了onItemSelected方法,因此它们被设置为其默认值。
我试着暂时禁用onItemSelected侦听器,但只要我再次启用它们,就会调用onItemSelected方法并重置Button和EditText状态。

注意:我只想恢复应用程序被系统而不是用户终止后的状态。

回答

0

您可以创建一个全局布尔变量,并在还原时将其设置为true。在onItemSelected中,你可以检查这个变量,如果它是真的,你不会改变button和editText的内容,只需将这个变量设置为false即可。 在onRestoreInstaceState:

wasRestored = true; 

在onItemSelected:

if(wasRestored){ 
    wasRestored=false; 
    return; 
} else {//change editText and Button content} 
+0

我通过在onRestoreInstanceState方法开始其设置为true,并在年底将其设置为false尝试这个。这虽然不起作用,但是当我没有将它设置回false时,它确实有效,但我的Spinner显然不再工作。所以从我的角度来看,onItemSelected方法似乎是在onRestoreInstanceState方法之后调用的,我不知道在哪里/为什么。 – user1219263

+0

你应该尝试在onItemSelected而不是onRestoreInstanceState中将其设置为false。如果(变量){变量=假;返回;} - 这样的事情。 – jumper0k

+0

好的,我纠正了它,但我仍然有问题。所以我试图找出一些日志记录会发生什么。下面的方法是在重启屏幕时调用的,没有你的建议:onCreate - init(Spinner,Button和EditText被初始化) - onRestoreInstanceState - onItemSelected - onItemSelected。通过添加全局布尔值,第一个onItemSelected调用消失,但仍然以某种方式调用了ItemSelected中的某处。 – user1219263

相关问题