функция setOnPreferenceClickListener не работает для предпочтений на Android


Я использую приведенный ниже код для печати текста в logcat, но функция setOnPreferenceClickListener не улавливает событие.

Я использую Android API Level 8 для тестирования кода.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="settings_use_cache"
        android:summary="Use cache"
        android:title="Use Cache" />

    <Preference
        android:defaultValue="true"
        android:key="settings_delete_cache"
        android:summary="Delete all cache data"
        android:title="Clear Cache" />

</PreferenceScreen>

Вот код

public static class CachePreferenceFragment extends
        PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        Log.w("DBG", "Oncreate started");

        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_cache);

        Preference settings_delete_cache=findPreference("settings_delete_cache");
        settings_delete_cache.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
                Log.w("Prefence", "Deleting Cache");
                return false;
            }
        });         
    }
}

Что я могу сделать, чтобы гарантировать, что слушатель поймает событие?

1 3

1 ответ:

Править: После разговора с этим Дэв вне потока было определено, что проблема заключалась в том, что он помещал своего слушателя внутрь фрагмента. Таким образом, этот код действительно работает, но он будет выполняться только при использовании двухпанельного макета. Фактически это указано прямо над методом:

    /**
     * This fragment shows notification preferences only. It is used when the
     * activity is showing a two-pane settings UI.
     */

    public static class CachePreferenceFragment extends
            PreferenceActivity {

Решение состоит в том, чтобы также установить прослушиватель onPreferenceClick в setupSimplePreferencesScreen()!