【问题标题】:Going to the same "instance" of an Intent/Activity in Android在 Android 中转到 Intent/Activity 的相同“实例”
【发布时间】:2012-05-13 19:28:26
【问题描述】:

我在 Android 应用程序中有一个菜单,当我单击其中一个按钮启动一个新活动时,我希望实例变量保持它们的值,即使我返回菜单并重新启动它也是如此。 这是我尝试过的:

public void onClick(View v) {

            Bundle b = new Bundle();
            b.putBoolean("isFav",false);
            centralsIntent = new Intent("kth.blod.CENTRALS");
            centralsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            centralsIntent.putExtras(b);

            startActivity(centralsIntent);
        }

在清单中:

android:launchMode="singleTop"

【问题讨论】:

  • 在回调菜单活动时尝试此意图:FLAG_ACTIVITY_CLEAR_TOP。如果您这样做,如果它仍在运行,则不会重新实例化。

标签: java android android-activity android-intent instance


【解决方案1】:

我认为共享首选项是跟踪您在应用程序的一个部分中设置的值的最简单方法,您希望保存这些值并可能在从应用程序的另一部分返回时进行修改。请参阅此链接以获取 Shared Preferences。请参阅this link 以了解如何实现它们。祝你好运!

【讨论】:

  • 我想要保留的值实际上是一个类的实例,包含对象列表。这些对象充满了在线内容,我不想每次有人返回菜单时都必须再次获取它。共享首选项似乎只传递字符串和整数。
【解决方案2】:

我对你的问题感到困惑。当您说“我有菜单”时,您的意思是主要活动(或第一个活动)是菜单吗?如果是这种情况,用户可以从菜单中进行选择,然后您可以开始一个新的活动,然后该活动将出现在 菜单活动的顶部。只要您不在菜单活动上调用finish(),它就不会消失(在正常情况下),并且当用户返回到它时,所有实例变量仍将包含用户启动新功能时所拥有的任何内容活动。此外,您不需要 launchMode='singleTop',因为这是标准的默认行为。

或者我不完全明白你的问题是什么......

【讨论】:

  • 是的,菜单是主要的activity,用户从我的内容activity返回时会返回菜单activity。但是,当我再次启动内容活动时,该活动中的信息会丢失。这是我想要在内容活动中保留的信息。所以我想启动内容活动的同一个“实例”。
  • 那么,在内容活​​动中,您需要做的是让它在某处存储其状态。我同意@thomas.cloud 的观点,即共享偏好是一个合理的地方。或者您可以将这些内容写入文件。您将需要根据您要用于存储它们的方法将要保存的对象序列化为字节流或字符串。
  • 这在智能手机上会不会是非常耗时的操作?主要是我有一个有 3 个数组列表的类,每个有 5-10 个对象。每个对象有大约 10 个字符串。如果问题很愚蠢,请原谅我,但我以前没有尝试过。是否可以将整个类实例作为共享首选项传递?
  • 不,序列化几百个字符串几乎不需要任何时间(除非它们很大)。不,您不能将类的实例(即:对象)放入共享首选项中。您必须先将其序列化为字符串。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多