有没有办法阻止onSharedPreferenceChangeListener直到最后一次更改?

时间:2015-04-07 05:06:22

标签: java android sharedpreferences

在设置活动中,我有多个字段,一旦用户按下保存,所有这些字段将作为键值分别存储在sharedPreference中。

问题在于每个编辑器的变化,例如

editor.putString(SERVER, server.toString());

将触发onSharedPreferenceChangeListener

虽然我只需要在更新所有值后触发它.. 有没有办法达到这个要求? 非常感谢

1 个答案:

答案 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();
    }
}