2013-03-06 67 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 2013-08-13 15:56:51

+0

@mpellegr感谢您指出!现在编辑答案。 – Renjith 2013-08-19 12:43:47

1

试试这个:
1.添加OnSharedPreferenceChangeListner

public class Opciones extends PreferenceActivity implements 
    OnSharedPreferenceChangeListener 

2.与覆盖方法onSharedPreferenceChanged

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

要使用这个,你需要使用getPreferenceScreen()getSharedPreferences()从你的活动中获取首选项,然后使用registerOnSharedPreferenceChangeListener()和你的GLOBAL VARIABLE(所以它不会被垃圾回收)OnSharedPreferenceChangeListner作为参数。 – mpellegr 2013-08-13 19:36:45