4

この方法には奇妙な問題があります。EditTextPreference を編集すると、値を変更したときにのみ呼び出され、MultiSelectListPreference では初めて変更したときにのみ呼び出されます。これは私のフラグメントコードです。

public class PrefFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        addPreferencesFromResource(R.xml.my_preferences);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // DO STUFF
    }

    @Override
    public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, final Preference preference) {
        // TODO Auto-generated method stub
        super.onPreferenceTreeClick(preferenceScreen, preference);
        // DO STUFF

    }

    @Override
    public void onResume() {
        super.onResume();
        // Set up a listener whenever a key changes
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        // Unregister the listener whenever a key changes
        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }
}

これは my_preferences.xml ファイルです

<PreferenceCategory android:title="Title1" > <EditTextPreference android:dialogMessage="@string/pref_pers_1_msg" android:dialogTitle="@string/pref_pers_1" android:key="@string/pref_pers_1_key" android:title="@string/pref_pers_1" /> <EditTextPreference android:dialogMessage="@string/pref_pers_2_msg" android:dialogTitle="@string/pref_pers_2" android:key="@string/pref_pers_2_key" android:title="@string/pref_pers_2" /> <EditTextPreference android:dialogMessage="@string/pref_pers_3_msg" android:dialogTitle="@string/pref_pers_3" android:key="@string/pref_pers_3_key" android:title="@string/pref_pers_3" /> </PreferenceCategory> <PreferenceCategory android:title="Title2" > <MultiSelectListPreference android:dialogTitle="title_dialog" android:entries="@array/array" android:entryValues="@array/array_elements" android:key="pref_pers_4" android:title="Title2" /> </PreferenceCategory>

4

2 に答える 2

-1

おそらく、onPause() コールバックが呼び出され、unregisterOnSharedPreferenceChangeListener が呼び出されたためです。

onResume() と onPause() の両方のメソッドにログを配置して、クリックしたときに登録解除メソッドが実行されなかったことを確認します。

于 2013-05-23T08:59:52.397 に答える