2013-05-03 78 views
0

我遇到了一些問題與我的應用程序...我有一個設置活動,用戶可以選擇應用程序的主題,然後我有一個按鈕,說「返回」並返回用戶到主Activity。之後,主題得到保存,一切正常。但我的問題是,如果用戶點擊了「Android後退按鈕」,我的主題不會被保存。有一種方法可以解決它?使用後退按鈕保存sharedPreferences

這裏是我的設置活動:

public class SettingsActivity extends Activity implements OnClickListener { 

public static final String PREF_NAME = "MyPrefsFile"; 
public static int newTheme; 
public final static int THEME_DARK = R.style.DarkTheme; 
public final static int THEME_LIGHT = R.style.LightTheme; 
public final static int THEME_COLORS = R.style.ColorsTheme; 
public final static int THEME_PERF = R.style.Performance; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    SharedPreferences settings = getSharedPreferences(PREF_NAME, MODE_PRIVATE); 
    newTheme = settings.getInt("themeCustom", 0); 

    if(newTheme == THEME_DARK) { 
     setTheme(R.style.DarkTheme); 

    } else if(newTheme == THEME_LIGHT){ 
     setTheme(R.style.LightTheme); 
    } else if(newTheme == THEME_COLORS) { 
     setTheme(R.style.ColorsTheme); 
    } else { 
     setTheme(R.style.Performance); 
    } 
    setContentView(R.layout.activity_settings); 

    findViewById(R.id.button2).setOnClickListener(this); 
    findViewById(R.id.button3).setOnClickListener(this); 
    findViewById(R.id.button4).setOnClickListener(this); 
    findViewById(R.id.button5).setOnClickListener(this); 
    findViewById(R.id.button6).setOnClickListener(this); 
} 
@Override 
public void onClick(View v) { 
    SharedPreferences settings = getSharedPreferences(PREF_NAME, MODE_PRIVATE); 
    SharedPreferences.Editor edit; 
    edit = settings.edit(); 
    Intent intent = getIntent(); 
    Intent main = new Intent(SettingsActivity.this,MainActivity.class); 
    switch (v.getId()) { 
    case R.id.button2: 
     newTheme = THEME_DARK; 
     edit.clear(); 
     edit.putInt("themeCustom", newTheme); 
     edit.commit(); 
     finish(); 
     startActivity(intent); 
     break;   
    case R.id.button3: 
     newTheme = THEME_LIGHT; 
     edit.clear(); 
     edit.putInt("themeCustom", newTheme); 
     edit.commit(); 
     finish(); 
     startActivity(intent); 
     break; 
    case R.id.button5: 
     newTheme = THEME_COLORS; 
     edit.clear(); 
     edit.putInt("themeCustom", newTheme); 
     edit.commit(); 
     finish(); 
     startActivity(intent); 
     break; 
    case R.id.button6: 
     newTheme = THEME_PERF; 
     edit.clear(); 
     edit.putInt("themeCustom", newTheme); 
     edit.commit(); 
     finish(); 
     startActivity(intent); 
     break; 
    case R.id.button4: 
     startActivity(main); 
     break; 
    default: 
     break; 
     }  
    }  
    } 

非常感謝您! :)

+0

你有嗎? – 2013-05-03 10:00:14

+0

是的,我知道了:) – 2013-05-03 14:19:51

回答

1

應覆蓋onBackPressed()方法

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // to do 
} 
+1

當超級函數被首先調用時,它會以這種方式工作嗎?不會在保存功能之前關閉活動嗎? – Gjordis 2013-05-03 09:55:34

+0

它的工作!非常感謝你!! :) – 2013-05-03 10:04:24

2

您可以使用onBackpressed()

public void OnBackpressed() 
{ 
// do stuff (same as what you did in your button click) 
} 

活動時已檢測到用戶的返回鍵的按下它被調用。默認實現只是完成當前活動,但您可以覆蓋它以執行任何您想要的操作。

0
@Override 
public void onBackPressed() { 
    //do whatever to save the settings 
    super.onBackPressed(); 
} 

任何你想要的按鈕+它的初衷這樣你就可以做到。

0

您可以使用以下方式

@Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     super.onBackPressed(); 
     SharedPreferences settings = getSharedPreferences("PREFS_NAME", 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putInt("themeCustom", newTheme); 
     editor.commit(); 
    }