1

設定の変更に応じて、SharedPreferencesの要約行を更新する際にいくつか問題が発生します。onResume()に登録済みのOnSharePreferenceChangeListenerがあり、onPause()に同じものの登録を解除しています。

リスナーは機能しており、onSharedPreferenceChanges()メソッドを使用できます。私が抱えている問題は、setSummary()を呼び出すことができるように、そこで設定を取得できることです。私はIceCreamSandwichにいますが、findPreference(key)メソッドは非推奨になっているようです。それで:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference pref = findPreference(key);}

は機能しておらず、実際にはprefに対してnullを返します。私が見た例から、setSummary()を呼び出す設定とアイデアを取得する必要がありますか?

4

2 に答える 2

5

これには anonSharedPreferenceChangedListenerを使用しないでください。

代わりに、これに似たものを使用してください。

ListPreference myPreference = (ListPreference) findPreference("preference_key");
myPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (((String)newValue).equals("some_value")) {
            preference.setSummary("my summary");
        }
    }
});

findPreferenceは非推奨ではありませんが、(非推奨) を使用するべきではありPreferenceActivityません。Android 3.0+ のみをサポートする必要がある場合はPreferenceFragment、新しい方法である に切り替える必要があります。Android 2.1+ をサポートする必要がある場合は問題なく、警告は無視できます。

于 2012-07-24T21:33:48.363 に答える
3

PreferenceFragment私は自分のコードで使用しようとしてきましたが、 findPreference(key)returnも表示されていましたnull。使用するための設定ドキュメントページのサンプルコードはOnSharedPreferenceChangeListener完全に更新されていないため、そのまま使用するとPreferenceFragmentクラッシュします。NullPointerException

私はついにそれを理解しました:もちろんそれが今の好みであるため、あなたはPreferenceビアを見つけなければなりません。PreferenceFragment後から明らかです。このようなもの:

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{   
    protected SettingsFragment settingsFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        settingsFragment = new SettingsFragment();
        getFragmentManager().beginTransaction().replace(android.R.id.content, settingsFragment).commit();
    }

    // ...

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("your_key")) {
            String newValue = sharedPreferences.getString(key, "");
            settingsFragment.findPreference(key).setSummary(newValue);
        }
    }
}
于 2012-10-09T14:12:42.340 に答える