13

我将尝试解释一个简单的应用场景:我的应用直接进入“主视图”。在这个主视图中,我插入了一个TextView显示通过PreferenceManager. 为简单起见,假设我的设置中有一个复选框。当我第一次启动我的应用程序时 -TextView我的主视图上正确显示了我的复选框设置(真)。现在我进入设置菜单,它会弹出,然后我将其更改为 false。我回到主视图并没有看到任何变化。即使我将其更改为假,它仍然说是真的。如果我结束应用程序然后重新启动它 - 一切都很好,它显示了我的变化。

显然,当我更改设置时,主视图只是停留在后台?更改设置后如何重绘或更新主视图?

4

2 回答 2

23

您可以在主 Activity 中实现OnSharedPreferenceChangeListener :

@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    if (PREFKEY_OF_INTEREST.equals(key))
        updateSomethingInMainView();
}

在 onCreate() 调用中:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
于 2010-04-18T19:32:43.943 回答
4

当您进入您的偏好时,您当前的活动应该暂停并在您返回时恢复(请参阅android 网站上生命周期图上的生命周期图)。我认为您应该能够从 onResume() 中触发某种重绘。这将允许页面上的数据重新填充。我猜某种 invalidate() 调用会做到这一点。

于 2010-04-13T23:15:16.417 回答