我有一个偏好,我动态地放置字符串并重新加载活动以立即显示更改,如下所示:
void restartActivity() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
问题是当某个特定值具有特定值时,我正在更改其他一些pref值。这会导致SHAREDPREFERENCELISTENER一次又一次地运行,导致上述方法一次又一次地运行。
出于某种原因,这会导致在顶部创建多个pref屏幕。
要澄清一些事情,我确实有这个:
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onDestroy() {
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
PreferenceScreen screen = this.getPreferenceScreen();
关于如何限制功能的任何想法,以便它不会一遍又一遍地创建屏幕?
答案 0 :(得分:0)
重新启动活动后,将布尔值设置为true
。重启完成后将其设置为false
。仅在startActivity
时调用false
。
声明一个字段:private boolean mRestarted = false;
在restartActivity
:
void restartActivity() {
if(!mRestarted} {
Intent intent = getIntent();
finish();
startActivity(intent);
mRestarted = true;
}
}
并在onCreate:
mRestarted = false;
这会奏效。但是刷新值是一种糟糕的方法......你应该做一些其他事情来重新加载更改。