【问题标题】:Android Activity not Retaining the Variables after being called by another ActivityAndroid Activity 在被另一个 Activity 调用后不保留变量
【发布时间】:2014-10-04 08:00:35
【问题描述】:

我正在开发一个测验应用程序,其中一个活动显示来自 SQLite 的问题和选项,在选择选项时,另一个活动显示 2000 毫秒的结果(它有一个计时器),然后它通过一个意图调用第一个活动。

因此,大多数交互是在 2 个活动之间进行的。但是每次调用我的 MainActivity 时,它都会一次又一次地重新初始化所有变量。

我在 onCreate() 中打开我的数据库连接,并保留一个计数器(可以计算已经问了多少问题),其值在第二个活动的意图之后没有保留。我很担心如何解决这个问题。

我对遵循的生命周期有点困惑。是否从第二个活动调用第一个活动以 onCreate() 开头,或者它也再次初始化实例变量。

这是我写的 onCreate() 方法:

public class MainActivity extends Activity {

    protected static final int SCORE_INCREMENT = 5;
    TextView question;
    Button score, opt1, opt2, opt3;
    MyDatabaseManager dbManager;
    QuizManager quizManager;
    private int quiz_counter =1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbManager = new MyDatabaseManager(getApplicationContext());
        dbManager.open();

        quizManager = new QuizManager(MainActivity.this, dbManager);

        Toast.makeText(MainActivity.this, "Asking The First Question", 0).show();

        askQuestion();
    }
    }

上面写的代码和我现在写的有什么区别吗...如果通过 Intent 再次调用活动

public class MainActivity extends Activity {

    protected static final int SCORE_INCREMENT = 5;
    TextView question;
    Button score, opt1, opt2, opt3;
    MyDatabaseManager dbManager  = new MyDatabaseManager(getApplicationContext());
    QuizManager quizManager  = new QuizManager(this, dbManager);
    private int quiz_counter =1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Toast.makeText(MainActivity.this, "Asking The First Question", 0).show();

        askQuestion();
    }
    }

这可能是一个愚蠢的问题。但这对我来说有点混乱。欢迎提出建议。

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    如果您想要在更改活动之间维护变量,那么您应该

    1. 将它们存储在SharedPreferences

    1. ActivitesIntents 之间传递它们(参见Starting another activity

    【讨论】:

    • SharedPreferences 应该用于数据持久性(即应用程序的设置),而不是用于保存Activity 的状态。仅当为结果启动 Activity 时,才能通过 Intent 发送要维护的变量。无论如何,这不是该机制的目的。他要做的是使用onSaveInstanceState()save the state of his Activity
    • OP 已指定第二个活动“通过 Intent 调用第一个活动”,而不是使用后台堆栈。这表明他们每次都在创建第一个活动的新实例,因此通过 Intent 传递数据是一个有效的解决方案。如果他们不是每次都从第二个活动创建第一个活动的新实例,而是使用 backstack 在第二个活动上调用 finish() 以返回第一个活动,那么我同意他们应该使用 onSaveInstanceState()跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多