在我的活动中,根据用户的偏好请求屏幕,我打电话:
startActivity(new Intent(this, Preferences.class));
Preferences类定义如下:
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
...
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
...
}
}
我需要在我的Preferences类中实现OnSharedPreferenceChangeListener,因为我希望能够 - 例如 - 根据特定选择禁用首选项。 但是我需要在我的主Activity中实现它,以对偏好变化作出反应。
不幸的是onSharedPreferenceChanged()仅在我的Preferences类中触发,而不是在我的主要活动中触发:如何强制它在机器人活动中被触发?
或者 - 如何从首选项活动中的onSharedPreferenceChanged()手动调用主活动中的onSharedPreferenceChanged()?
答案 0 :(得分:2)
在您的主要活动中,您可以为prefs更改注册一个监听器:
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
然后您将使用自己的SharedPreferences.OnSharedPreferenceChangeListener
方法在您的活动中实施onSharedPreferenceChanged
。
答案 1 :(得分:1)
那么,在目前没有“活跃”的活动中观察偏好变化几乎没有意义。您应该处理主要活动的生命周期事件,例如onResume
,onRestart
等。
答案 2 :(得分:0)
如果要从两个活动中访问某些功能,最好将此代码包含在可以从任何地方调用的静态方法中。在Android活动中解耦,您实际上无法从一个活动访问其他活动的实例。