我正在研究listpreferences,并且我已经实现了OnSharedPreferenceChangeListener,以根据listpreference上选择的项目来更改textview上的文本。但是,它没有注册任何更改,我已经没有想法,所以任何帮助将不胜感激。感谢
public class pref extends PreferenceActivity implements OnSharedPreferenceChangeListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
setContentView(R.layout.main);
TextView text = (TextView) findViewById(R.id.textView1);
String keys = null;
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.registerOnSharedPreferenceChangeListener(this);
keys = pref.getString("listPref1", "");
if (keys == "ON")
{
text.setText("ON");
}
else if (keys == "OFF")
{
text.setText("OFF");
}
else{
text.setText("Choose One");
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
//What code to I put in here to have the listener register the change
}
}
答案 0 :(得分:3)
您的代码看起来很适合注册偏好更改,您需要在onSharedPreferenceChanged
方法中放置一些代码,以便在更改时处理首选项。请记住,当任何首选项更改时,您将收到回调,因此您需要在方法中进行一些过滤,以确保它是您感兴趣的内容。
可能是一件简单的事情:
if(key.equals("listPref1"))
text.setText("ON"); // Need to make text a class variable
答案 1 :(得分:2)
谢谢大家的帮助,我现在将大部分内容排序在这里是代码
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
TextView text = (TextView) findViewById(R.id.textView1);
if (prefs.getString("listPref1", "").equals("OFF")) {
text.setText("goodbye");
} else if (prefs.getString("listPref1", "").equals("ON")) {
text.setText("hello");
}
prefs.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
TextView text = (TextView) findViewById(R.id.textView1);
if (prefs.getString("listPref1", "").equals("OFF")) {
text.setText("goodbye");
} else if (prefs.getString("listPref1", "").equals("ON")) {
text.setText("hello");
}
}
}
正如你所看到的,我必须重复if / else语句,如果我只将它放在监听器中,那么在进行更改之前什么都不会发生,如果它只在监听器之外,它只会在应用程序首次运行时被读取并且没有注册更改。
是否有代码让侦听器通知已进行更改并重新运行代码?
答案 2 :(得分:1)
您的代码看起来应该有效:您可以尝试注销以确保其执行应有的操作。将所有条件代码移动到侦听器中。
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
android.util.Log.v("PREFERENCE CHANGE", "[" + key + "]");
if ("listPref1".equals(key)) {
String keys = pref.getString("listPref1", "");
if (keys == "ON") {
text.setText("ON");
} else if (keys == "OFF") {
text.setText("OFF");
} else {
text.setText("Choose One");
}
}
}
答案 3 :(得分:0)
您没有任何代码可以实际更新您的SharedPreferences。只有在编辑pref
对象时才会触发侦听器。实施例...
pref.edit().putString("listPref1", "ONE").commit();