3

我在我的应用程序上实现了两个简单的主题,您可以在SettingsActivityextending PreferenceActivity)中选择它们。在哪里重新创建活动?

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

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

顺便说一下,我不完全清楚在哪里把这个代码。实现它的唯一方法是把它放在onRestart()方法中,

但这是一个巨大的CPU浪费,电池和用户体验。

任何帮助?

+0

究竟是什么问题? – Kuffs 2012-07-30 13:32:27

+0

我需要将新选定的主题应用于所有活动。为了实现这一点,我需要重新创建旧的。我怎样才能做到这一点? – Enrichman 2012-07-30 13:35:09

+0

如果主题更改以便可以重新创建所有活动,则强制用户回到应用程序的开始位置。 – Kuffs 2012-07-30 13:36:15

回答

1

在主题首选项上设置PreferenceChangedListener。如果它被触发,请将您的用户清除回应用程序的顶层。你可以重新开始当前的活动,但如果你有很多活动很深,那么这会变得有点痛苦。更容易重置应用程序回到开始。

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

我终于管理如何做到这一点,谢谢。 – Enrichman 2012-07-30 20:44:20

1

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

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

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