我想在每次点击“保存”按钮时使用sharedPreferences
保存用户对主题的选择,但有些事情我明显做错了但我看不到它。
我的问题是,如果没有sharedPreferences
内容,我的应用程序会按照我想要的方式更改主题,并且没有任何问题。但是,当我应用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;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Here is where I'm supposed to check the sharedPreferences then
// Set the theme option newTheme with the users last choice,
// and if there is
// a choice set the theme.
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 {
// Utils.onActivityCreateSetTheme(this);
setTheme(R.style.AppTheme);
}
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) {
Intent intent = getIntent();
Intent main = new Intent(SettingsActivity.this,MainActivity.class);
switch (v.getId()) {
case R.id.button2:
newTheme = THEME_DARK;
finish();
startActivity(intent);
break;
case R.id.button3:
newTheme = THEME_LIGHT;
finish();
startActivity(intent);
break;
case R.id.button5:
newTheme = THEME_COLORS;
finish();
startActivity(intent);
break;
case R.id.button4:
// This button returns to the main activity without saving.
startActivity(main);
break;
case R.id.button6:
// this is the button save
SharedPreferences settings =
getSharedPreferences(PREF_NAME, MODE_PRIVATE);
SharedPreferences.Editor edit;
edit = settings.edit();
edit.clear();
edit.putInt("themeCustom", newTheme);
edit.commit();
startActivity(main);
break;
default:
break;
}
}
}
答案 0 :(得分:1)
我认为这是因为您在一个SharedPreferencec.Editor事务中调用clear和putInt。 http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#clear()
不要叫清楚,只有putInt
答案 1 :(得分:1)
我认为你没有保存这些变化。每次点击主题更改按钮时,您只需将新主题值分配给newTheme
代码,然后finish()
该活动。但是,在完成活动之前保存更改的位置?
您应该在完成活动之前提交新的更改,然后我认为它将反映更改。
答案 2 :(得分:0)
问题在于int和long。
这里newTheme是int,它存储THEME_DARK或THEME_ILGHT等等。但是THEME_DARK和其他变量具有长值,即R.style.DarkTheme可以是长值或十六进制值。
所以最终当你在sharedPref中保存这些newTheme时,你实际上只在这里保存0。
您可以在将newTheme变量写入Shared Pref之前检查它的值。这将清除您的问题。
要解决此问题,您可以使用这些主题的任何其他最终整数值,并将它们保存到共享的首选项中。
希望这能解决您的问题。
答案 3 :(得分:0)
要保存共享首选项,可以使用以下代码:
SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor prefEditor = prefs.edit();
prefEditor.putInt(“themeCustom”, 0);
prefEditor.commit();