2017-02-10 55 views
1

我希望PreferenceActivity中所做的任何更改都不會被保存,除非用戶按下我添加到ActionBar的「完成」按鈕,所以,如果按下返回按鈕,更改將不會應用,並且開關將變回他們以前的價值。如果用戶按R.id.home或後退按鈕,如何放棄PreferenceActivity中的更改?

enter image description here

UPDATE:

根據@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(); 
} 

這似乎如預期,並符合我的預期工作,但。 ..

這是做它的正確方法還是不建議在y方面?我發現它很奇怪......讓android自行應用更改並手動還原它們,如果按回來,則再次應用上一個...

我認爲如果我是應用更改的人會更容易如果按下完成,則只有

+0

我不知道關於要嘗試的內容......開關值似乎存儲在應用程序配置中,在我切換它們的正確時刻。 –

+0

它的邏輯宏...你必須維護五個變量,它們包含的值就像它們被點擊或不在...完成按鈕點擊,你必須從這5個變量中獲得值並將它保存到你的共享偏好.. ot Dost –

+0

真的嗎?我記住了這一點,但我認爲如果按下後退按鈕,SDK中會有一個首選項或某些東西來恢復更改,我的意思是,後退按鈕=取消更改...好吧,所以我必須手動執行此操作,對? –

回答

0

首先,你必須得到切換的價值在onCreate也就是說,究竟是什麼toggle以前的狀態要麼,它關閉或打開,如下圖所示: -

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.. 
     } 
    }); 
-1

取得「完成」按鈕的標誌。 當您輸入首選項活動時,將所有值優先保存爲默認值。 如果用戶單擊「完成」,則相應地更改它們,否則將值更改爲首選項。

+0

我不明白你的意思...問題更新,我已經得到了我想要的,但完成按鈕只是完成活動,因爲android已經適用本身的變化:/我想禁用這種行爲 –

相關問題