0

listView アクティビティがあり、ユーザーが行ったいくつかの設定を適用して保存する必要があります。ListView の各行には、2 つの TextView (年と国) が含まれています。

onSharedPreferenceChanged イベントを次のように処理します。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(new SharedPreferences.
        OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs,
            String key) {
        TextView year = (TextView) findViewById(R.id.year);
        year.setTextSize(Float.parseFloat(prefs.getString(key, null)));
        TextView country = (TextView) findViewById(R.id.country);
        country.setTextSize(Float.parseFloat(prefs.getString(key, null)));
    }
});

ただし、変更は最初の行にのみ適用され、他の行は以前と同じままです。

リストの各行に新しい設定を適用するにはどうすればよいですか? 回答ありがとうございます。

4

1 に答える 1

0

コードを次のように変更します。

OnSharedPreferenceChangeListener listener; // class field

// in onResume()
SharedPreferences prefs = PreferenceManager
        .getDefaultSharedPreferences(this);
listener = new SharedPreferences.
        OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs,
            String key) {
        TextView year = (TextView) findViewById(R.id.year);
        year.setTextSize(Float.parseFloat(prefs.getString(key, null)));
        TextView country = (TextView) findViewById(R.id.country);
        country.setTextSize(Float.parseFloat(prefs.getString(key, null)));
    }
};
prefs.registerOnSharedPreferenceChangeListener(listener);
// unregister in onPause()

説明については、こちらを参照してください

于 2013-03-24T19:49:52.340 に答える