2

我想弄清楚如何在某个地方存储变量,所以当我切换到另一个活动然后再返回时,变量仍然包含这个值。不久前我使用共享首选项进行了此操作,但这是一个糟糕的解决方案,这比我需要的更持久,而且不是正确的方法。

如果在活动一中按下某个按钮,这将通过意图打开活动二并将值设置为活动二中的字符串。当转到另一个活动,或按下后退按钮,然后返回活动二时,字符串被重置回其初始值。

我试过了:

共享首选项(有效但不好)静态变量(似乎没有任何区别,也许我做错了什么)使用保存的实例状态和恢复状态方法,如下所示:

 @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
     savedInstanceState.putString(destination, des);
        super.onSaveInstanceState(savedInstanceState);
    }


 @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        des = savedInstanceState.getString(destination);
    }

我承认我不知道如何做到这一点,而科学怪人代码一起给我带来的问题比其他任何事情都多,但到目前为止还没有出现干草叉。

为了在活动之间的字符串中保存一个值,您有经验的程序员推荐什么?

4

2 回答 2

3

您可以将其作为extra使用传递Intent

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("key", value); // where key is whatever you want to name it 
                              //and will be used to retrieve it in the next 
                              //activity and value is the actual value of your string
startActivity(intent);

然后在您的第二个活动中获取价值

Intent curIntent = getIntent();
String variableName = curIntent.getStringExtra("key");

意图

于 2013-03-14T00:24:39.553 回答
1

另一种选择是用一个新的类来扩展 Activity,比如 SuperActivity。然后,在每个后续活动类中,扩展 SuperActivity 类。将您希望全局访问的项目放在 SuperActivity 类中。

请记住,这将使用每个新 Activity 构建 SuperActivity 类 - 因此需要初始化动态变量。但是,静态变量将在实现之间进行维护。

对于它的价值,我不会用它来替换通过意图传递的数据。通过这样做,每个活动都包含在 SuperActivity 中的每个变量。因此,除非您的所有(或几乎所有)活动都需要该变量,否则最好通过意图传递它。

于 2013-03-14T01:12:29.593 回答