Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果用户按R.id.home或back按钮,如何放弃PreferenceActivity中的更改?_Android - Fatal编程技术网

Android 如果用户按R.id.home或back按钮,如何放弃PreferenceActivity中的更改?

Android 如果用户按R.id.home或back按钮,如何放弃PreferenceActivity中的更改?,android,Android,我希望在PreferenceActivity中所做的任何更改都不会被保存,除非用户按下我添加到ActionBar的“完成”按钮,因此,如果按下“后退”按钮,更改将不会应用,开关将更改回其以前的值 更新: 根据@Ravindra Kushwaha的建议,我详细阐述了以下代码: boolean push_switch, push_on, push_off, push_stats; @Override protected void onCreate(Bundle savedInstanceState

我希望在PreferenceActivity中所做的任何更改都不会被保存,除非用户按下我添加到ActionBar的“完成”按钮,因此,如果按下“后退”按钮,更改将不会应用,开关将更改回其以前的值

更新:

根据@Ravindra Kushwaha的建议,我详细阐述了以下代码:

boolean push_switch, push_on, push_off, push_stats;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupActionBar();
    push_switch = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_switch", true);
    push_on = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_on", true);
    push_off = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_off", true);
    push_stats = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_stats", true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch(id)
    {
        case android.R.id.home:
            onBackPressed();
            return true;
        case 1000: // Done button
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed() {
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = settings.edit();
    editor.putBoolean("push_switch", push_switch);
    editor.putBoolean("push_on", push_on);
    editor.putBoolean("push_off", push_off);
    editor.putBoolean("push_stats", push_stats);
    editor.apply();
    finish();
}
这看起来像预期的一样,符合我的期望,但是

这是正确的方法还是在任何方面都不推荐?我觉得很奇怪。。。让android自己应用更改,如果按下返回键,手动恢复更改,再次应用上一个更改

我想如果我是一个只在按下“完成”按钮时才应用更改的人,这会更容易。

为“完成”按钮打上标记。 输入“首选项活动”时,将首选项中的所有值保存为默认值。
如果用户单击“完成”,则相应地更改它们,否则将值更改为首选项。

首先,您必须在您的
onCreate
中获取切换值,也就是说,
切换之前的状态是什么,它是关闭还是打开,如下所示:-

boolean push_switch, push_on, push_off, push_stats;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupActionBar();
    push_switch = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_switch", true);
    push_on = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_on", true);
    push_off = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_off", true);
    push_stats = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("push_stats", true);

 ////And than after , you have to set these values in yours toggle like:
   toggleFirst.setChecked(push_on)
   toggleSecond.setChecked(push_off)
   toggleThird.setChecked(push_switch)
   toggleForth.setChecked(push_stats)

}

  /////Perfom click listeners in yours all toogle like below and save the value in the boolean variables
YOUR_TOGGLE_BUTTONS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked)
    {
        push_on = true;   ///// i am assign all value together , you have to maintain setOnCheckedChangeListener for each toggle and assign the vale..for the example ,i have done these
        push_off= true;
        push_switch= true;
        push_stats= true;

    }
    else
    {
        push_on = false;
        push_off= false;
        push_switch= false;
        push_stats= false;

    }

}
});
  //////And in the last on Done button click listener save your data like below

 YOUR_DONE_BUTTON.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            /////HERE SAVE THE VALUE INSIDE THE SHARED PREFRENCE..
        }
    });

我不知道该尝试什么。。。开关值似乎在我切换它们的正确时刻存储在app config中。其逻辑兄弟…你必须维护五个变量,这五个变量包括值,就像它们是否被单击一样…在完成按钮单击时,你必须从这五个变量中获取值,并将其保存到你的共享首选项中…得到了吗?我已经想到了这一点,但我认为如果按下后退按钮,SDK中会有一个首选项或某些东西来恢复更改,我的意思是,后退按钮=取消更改。。。好的,所以我必须手动操作,对吗?是的,兄弟…试试看…如果你有任何问题,请告诉我,我缺少了与GetDefaultSharedReferences(上下文)等效的编写而不是读取我不明白你的确切意思。。。问题更新,我已经得到了我想要的,但“完成”按钮刚刚完成活动,因为android已经自己应用了更改:/I想禁用此行为