2013-03-06 3 views
1

У меня есть варианты prefence как это:Android PreferenceActivity

public class Opciones extends PreferenceActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.opciones); 

     SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); 

     EditTextPreference editTextPref = (EditTextPreference) findPreference("opcCodigo"); 
     editTextPref.setSummary(sp.getString("opcCodigo", "")); 

     EditTextPreference editTextPref2 = (EditTextPreference) findPreference("opcUrl"); 
     editTextPref2.setSummary(sp.getString("opcUrl", "")); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     Preference pref = findPreference(key); 
     if (pref instanceof EditTextPreference) { 
      EditTextPreference etp = (EditTextPreference) pref; 
      pref.setSummary(etp.getText()); 
     } 
    } 
} 

Дело в том, что при изменении данных, поля не обновляются, я должен закрыть свою деятельность и запустить его снова, чтобы увидеть их.

Что мне не хватает?

Заранее спасибо

ответ

1

Реализовать OnPreferenceChangeListener и переопределить следующий метод.

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
     //newValue is the edited data 
     if(editTextPref == preference) editTextPref.setSummary(newValue); 
     else editTextPref2.setSummary(newValue); 
} 
+0

Почему это принято отвечать? PreferenceActivity даже не имеет метода onPreferenceChange() для переопределения. – mpellegr

+0

@mpellegr Спасибо за указание! Ответ теперь отредактирован. – Renjith

1

Попробуйте это:
1. Добавить OnSharedPreferenceChangeListner

public class Opciones extends PreferenceActivity implements 
    OnSharedPreferenceChangeListener 

2. И Override метод onSharedPreferenceChanged

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key){ 
    // ... 
} 
+0

Чтобы использовать это, вам нужно получить настройки из вашей активности с помощью getPreferenceScreen(). GetSharedPreferences(), а затем использовать registerOnSharedPreferenceChangeListener() с GLOBAL VARIABLE (так что это не будет сбор мусора) OnSharedPreferenceChangeListner в качестве аргумента. – mpellegr