3

さて、私はこの恐ろしいコードを Google のアンドロイドから実装し始めました。OnSharedPreferenceChangeListener が呼び出されていません。これは私のコードです。アドバイスをお願いできますか?

クラス定義:

private SharedPreferences sPrefs;
private PreferenceChangedListener prefsChangedListener;

私はプライベートな内部クラスを持っています:

private class PreferenceChangedListener implements
        OnSharedPreferenceChangeListener {

    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        if (key == "highThreshold") {
            try {
                highThreshold = Float.parseFloat(sharedPreferences
                        .getString(key, "0"));
            } catch (Exception e) {
            }
        }
    }
}

OnResume で次のコードを試し、「Voorkeuren」設定アクティビティが開始された後にリスナーを登録しようとしました。どちらも失敗します。

sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

PreferenceActivity を拡張するクラス Voorkeuren を定義しました

public class Voorkeuren extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_voorkeuren, menu);
        return true;
    }
}

私は次のように開きます:

Intent intent = new Intent(getBaseContext(),Voorkeuren.class);
startActivity(intent);

クラスは正常に表示され、セッション間で値が保存されます。しかし、設定が変更された場合、私のアプリケーションはポーリングされるべきではありません。何か案は?SharedPreferences.Editor について赤い点がありますが、それがどのように関連しているかはわかりません。

4

1 に答える 1

4

あなたの質問が何であり、何が望まれているのかわかりません。

ただし、変更する必要があることが 1 つあります。これを onResume に置き換えます

sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

sPrefs = PreferenceManager.getDefaultSharedPreferences(this);;
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener); 

onCreate() で

于 2012-12-02T13:25:18.077 に答える