Android 如果用户按R.id.home或back按钮,如何放弃PreferenceActivity中的更改?
我希望在PreferenceActivity中所做的任何更改都不会被保存,除非用户按下我添加到ActionBar的“完成”按钮,因此,如果按下“后退”按钮,更改将不会应用,开关将更改回其以前的值 更新: 根据@Ravindra Kushwaha的建议,我详细阐述了以下代码: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
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想禁用此行为