2014-11-18 8 views
0

У меня есть эти предпочтения:SharedPreference Изменение Слушатель и пользовательские предпочтения

<xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
<CheckBoxPreference 
    android:key="pk1" 
    android:title="@string/pt1" 
    android:summary="@string/pt1s" 
    android:defaultValue="false" /> 
<CheckBoxPreference 
    android:key="pk2" 
    android:title="@string/pt2"   
    android:defaultValue="false" /> 
<ListPreference 
    android:key="pk3" 
    android:title="@string/pt3" 
    android:dialogTitle="@string/pt3" 
    android:entries="@array/fontsi" 
    android:entryValues="@array/fontsiv" 
    android:defaultValue="0" />  
<Preference 
android:key="pkb" 
android:title="@string/ptb" /> 
</PreferenceScreen> 

И активность настройки:

public class SettingsActivity extends PreferenceActivity { 
SharedPreferences.OnSharedPreferenceChangeListener lst; 
SharedPreferences prf; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    prf = getPreferenceScreen().getSharedPreferences(); 
    lst = new SharedPreferences.OnSharedPreferenceChangeListener() { 
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
    Log.i("SettingsActivity","!any preference changen!"); 
    if (key.equals("pk1")) { Log.i("SettingsActivity","!pref PK1 called!"); }           } 
    else if (key.equals("pkb")) { Log.i("SettingsActivity","!pref PKB called!"); }    
    prf.registerOnSharedPreferenceChangeListener(lst); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    prf.registerOnSharedPreferenceChangeListener(lst); } 

@Override 
protected void onPause() { 
    super.onPause(); 
    prf.unregisterOnSharedPreferenceChangeListener(lst); } 
...  
} 

Слушатель работает со всеми предпочтениями, но е пользовательских предпочтений (последний, ПКБ как ключ)! Что я хочу использовать в качестве кнопки «Назад». Кто-нибудь знает почему?

ответ

1

Очевидно, что ваши предпочтения не изменят никаких предпочтений.

Поскольку он ничего не делает, OnSharedPreferenceChangeListener игнорирует его.

Возможным решением было бы установить clickListener ему так:

findPreference("pkb").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     Log.i("SettingsActivity", "!pref PKB called!"); 
     return false; 
    } 
}); 
+0

Я думаю, вы правы user324 (? Могу ли я позвонить вам user324), OnPreferenceClickListener работает точно, это был старый код , Мне не нравится идея поставить второго слушателя, но я думаю, что я должен ... Спасибо user324, я думаю, что плохо признаю ваш ответ через 2 дня. – Jackd

+0

@ Jackd приветствую :) – Simas

 Смежные вопросы

  • Нет связанных вопросов^_^