【问题标题】:How can I keep an Android activity from reverting back to how it was initially created?如何防止 Android 活动恢复到最初创建的方式?
【发布时间】:2015-05-07 00:43:16
【问题描述】:

我正在制作一个存储事物列表的应用程序。第一个活动以带有“空”的 TextView 和操作栏中的 + 按钮开始。有一个 ListView 设置为 GONE。我希望这样当我创建一个新条目时,空的 TextView 会消失,而 ListView 会出现,并带有新条目。

我尝试了这三种方法:

  1. 两种不同的布局。第一个带有在 onCreate 函数中设置的 TextView。 + 按钮打开一个对话框,当用户单击“创建”(肯定按钮)时,它会检查列表是否为空。如果是这样,它使用 setContentView(id) 来加载带有 ListView 的新布局。

  2. 一种布局,“空”TextView 的可见性设置为可见,ListView 设置为消失。单击对话框的“创建”按钮时,它会检查列表是否为空。如果是这样,它将 ListView 设置为 Visible,并将 TextView 设置为 Gone。

  3. 与第二种方法类似,只是我将 ListView 设置为 Visible 并将 TextView 设置为消失。在 onCreate 方法中,我将 TextView 设置为 Visible,并将 ListView 设置为 Gone。我在想如果它按照默认布局值进行,这会起作用。

在所有这 3 种方法中,第一个活动恢复正常。问题是在用户创建新项目后,活动会打开一个包含项目信息的新活动。当我退出第二个活动时,第一个活动恢复正常,有一个可见的 Empty TextView 和一个隐藏的 ListView。

似乎当我从第一个活动返回时,onCreate 方法再次运行。有什么方法可以将活动保持在后台,还是我还缺少其他东西?

提前致谢!

【问题讨论】:

  • 请发布您的代码

标签: android android-layout listview android-activity android-listview


【解决方案1】:

您可以使用startActivityForResult 开始新活动。这减少了(但不是必须避免)您的活动被破坏的可能性。

如果您真的想确定,请使用onSaveInstanceState 保存活动状态并在onCreate 中恢复。

【讨论】:

  • 我使用onSaveInstatnceState(Bundle out)onRestoreInstantceState(Bundle in) 来维护活动状态并且它有效。谢谢!
【解决方案2】:

嗯,当活动开始时,您的onCreate is 再次调用......所以您可以使用Sharedpreferences 的一些逻辑来获取以前保存的值

在完成按钮上使用此逻辑

SharedPreferences sp = getSharedPreferences("session", MODE_PRIVATE);
    Editor et = sp.edit();
    et.putBoolean("get_flag", true);
    et.commit();

在 onCreate 中使用这个

SharedPreferences sp = getSharedPreferences("session",
                        MODE_PRIVATE);
                boolean value = sp.getBoolean("get_flag", false);
                if (value) {
                    Do Your Stuff


                } else {
                    Do Your Stuff
                }

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2011-07-22
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2012-05-30
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多