有没有办法将 onSharedPreferenceChangeListener 保留到最后一次更改?
Is there a way to hold up onSharedPreferenceChangeListener until last change?
在设置 activity 中,我有多个字段,一旦用户按下保存,所有这些字段将作为键值单独存储在 sharedPreference 中。
问题是每次编辑器更改,例如
editor.putString(SERVER, server.toString());
将触发 onSharedPreferenceChangeListener
虽然我只需要在更新所有值后触发它..
有什么办法可以达到这个要求吗?
非常感谢
只有一种方法可以做到这一点。您可以将 editor.putString(SERVER, server.toString());
放在运行时代码中,例如按下按钮。一旦 activity 在 onDestroy()
方法中调用 editor.commit();
被销毁,它将保存值并触发 onSharedPreferenceChangeListener
。简单地说,等待用户先关闭 activity 这意味着用户已经更改了所有设置。
注意:请确保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();
}
}
在设置 activity 中,我有多个字段,一旦用户按下保存,所有这些字段将作为键值单独存储在 sharedPreference 中。
问题是每次编辑器更改,例如
editor.putString(SERVER, server.toString());
将触发 onSharedPreferenceChangeListener
虽然我只需要在更新所有值后触发它.. 有什么办法可以达到这个要求吗? 非常感谢
只有一种方法可以做到这一点。您可以将 editor.putString(SERVER, server.toString());
放在运行时代码中,例如按下按钮。一旦 activity 在 onDestroy()
方法中调用 editor.commit();
被销毁,它将保存值并触发 onSharedPreferenceChangeListener
。简单地说,等待用户先关闭 activity 这意味着用户已经更改了所有设置。
注意:请确保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();
}
}