2013-05-03 88 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(); 
    }