0

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

void restartActivity() {
            Intent intent = getIntent();
            finish();
            startActivity(intent);
}

问题是当特定值具有特定值时,我正在更改其他一些首选项值。这会导致 SHAREDPREFERENCELISTENER 一次又一次地运行,从而导致上述方法一次又一次地运行。

出于某种原因,这会导致在顶部创建多个首选项屏幕。

为了清除一些东西,我确实有这个:

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

关于如何限制功能使其不会一遍又一遍地创建屏幕的任何想法?

4

1 回答 1

0

Set a boolean value to true after you restarted the activity. Set it to false after the restart is completed. Call startActivity only if it is false.

Declare a field: private boolean mRestarted = false;

In restartActivity:

void restartActivity() {
    if(!mRestarted} {
        Intent intent = getIntent();
        finish();
        startActivity(intent);
        mRestarted = true;
    }
}

And in onCreate:

mRestarted = false;

This will work. But it's a bad way to refresh the values... You should do something else to reload the changes.

于 2013-07-09T09:24:45.657 回答