pref屏幕多次打开android

时间:2013-07-09 09:17:04

标签: android preferences

我有一个偏好,我动态地放置字符串并重新加载活动以立即显示更改,如下所示:

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();

关于如何限制功能的任何想法,以便它不会一遍又一遍地创建屏幕?

1 个答案:

答案 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;

这会奏效。但是刷新值是一种糟糕的方法......你应该做一些其他事情来重新加载更改。