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

trueアクティビティを再開した後、ブール値を に設定します。false再起動完了後に設定してください。startActivityの場合にのみ呼び出しfalseます。

フィールドを宣言します。private boolean mRestarted = false;

restartActivity

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

そしてonCreate:

mRestarted = false;

これは機能します。しかし、値を更新するのは悪い方法です...変更を再ロードするには、何か他のことをする必要があります。

于 2013-07-09T09:24:45.657 に答える