【问题标题】:Where to recreate the activity?在哪里重新创建活动?
【发布时间】:2012-07-30 13:29:14
【问题描述】:

我在我的应用中实现了两个简单的主题,您可以在 SettingsActivity (extending PreferenceActivity) 中选择它们。

此时,当您更改主题时,它仅应用于新创建的活动,因为您调用设置的活动是活动堆栈中的旧活动。

我搜索了很多,发现这个非常有用:how to restart an activity

顺便说一句,我并不完全清楚这段代码的放置位置。使其工作的唯一方法是将其放入onRestart() 方法中,

但这是对 CPU、电池和用户体验的巨大浪费。

有什么帮助吗?

【问题讨论】:

  • 你的问题到底是什么?
  • 我需要将新选择的主题应用到所有活动中。为了实现这一点,我还需要重新创建旧的。我该怎么做?
  • 如果主题发生变化,则强制用户回到应用程序的开头,以便重新创建所有活动。
  • 好的,我该怎么做?在哪里?基本上现在用户可以输入设置,更改主题并使用后退按钮返回(从 OptionsMenu 调用设置)。

标签: android android-activity preferenceactivity android-theme


【解决方案1】:

在主题偏好上设置PreferenceChangedListener。如果它被解雇,请将您的用户清除回应用程序的顶层。你可以重新开始当前的活动,但如果你有几个活动很深,那么这会变得有点痛苦。更容易将应用程序重置为开始。

        Intent i = new Intent(this, MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        this.finish();
        this.startActivity(i);

【讨论】:

    【解决方案2】:

    我会为 onPreferenceChanged 注册一个监听器。在那里,您可以检查您的主题偏好是否是已更改的主题。然后,您可以使用以下代码重新启动您的 Activity。

    Intent intent = getIntent();
    finish();
    startActivity(intent);
    

    通过使用 getIntent() 获取意图,您可以确保您的 Activity 将以完全相同的方式启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 2015-11-25
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多