在设置活动中,我有多个字段,一旦用户按下保存,所有这些字段将作为键值分别存储在sharedPreference中。
问题在于每个编辑器的变化,例如
editor.putString(SERVER, server.toString());
将触发onSharedPreferenceChangeListener
虽然我只需要在更新所有值后触发它.. 有没有办法达到这个要求? 非常感谢
答案 0 :(得分:2)
只有一种方法可以做到这一点。您可以将editor.putString(SERVER, server.toString());
放在运行时代码中,例如按下按钮。一旦活动被销毁,请在editor.commit();
方法中调用onDestroy()
,它将保存该值并触发onSharedPreferenceChangeListener
。简单地说,等待用户先关闭活动,这意味着用户已经更改了所有设置。
注意:请确保editor
是实例变量或为其创建字段。
修改强>
以下是您的示例:
public class SettingsActivity extends Activity {
// a field for preference
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedpreferences = getSharedPreferences("MyPreference", Context.MODE_PRIVATE);
editor = sharedpreferences.edit();
// for example, edit the value using a button at runtime
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putString(SERVER, server.toString());
}
});
...
}
@Override
protected void onDestroy(){
// call commit to save all changes
editor.commit();
super.onDestroy();
}
}