Android SharedReferences未更新
我仍然在安卓系统中受罪。我试图保存一个季节和年份来表示默认的“学期”,但我的更改不适用。我已经记录并确认我的Android SharedReferences未更新,android,settings,sharedpreferences,Android,Settings,Sharedpreferences,我仍然在安卓系统中受罪。我试图保存一个季节和年份来表示默认的“学期”,但我的更改不适用。我已经记录并确认我的settings.edit().putin()语句正在尝试输入我期望的值 但是当我重新加载屏幕时,我看到我的首选项使用了提供的默认值。为什么我的价值观不被接受?谢谢 公共类SetSemaster扩展了ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCr
settings.edit().putin()
语句正在尝试输入我期望的值
但是当我重新加载屏幕时,我看到我的首选项使用了提供的默认值。为什么我的价值观不被接受?谢谢
公共类SetSemaster扩展了ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_semester);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new SetSemesterFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.set_semester, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class SetSemesterFragment extends Fragment {
View rootView;
SharedPreferences settings;
int YEAR_DEFAULT_VALUE = AddCourse.thisYear - AddCourse.baseYear;
int SEASON_DEFAULT_VALUE = 0;
String year_key;
String season_key;
static int baseYear=2005;
static int thisYear = Calendar.getInstance().get(Calendar.YEAR);
public SetSemesterFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_set_semester,
container, false);
year_key = getResources().getString(R.string.year_pref_str);
season_key = getResources().getString(R.string.season_pref_str);
Button b = (Button) rootView.findViewById(R.id.apply_semester_btn);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
applySemester(v);
}
});
settings = this.getActivity().getSharedPreferences(getResources().getString(R.string.main_prefs_file), 0);
int curYear = settings.getInt(year_key, YEAR_DEFAULT_VALUE);
int curSeason = settings.getInt(season_key, SEASON_DEFAULT_VALUE);
System.out.println("stored values..." + curYear + " " + curSeason);
//Year Spinner
ArrayList<String> years = new ArrayList<String>();
for (int i = baseYear; i <= 2030; i++)
{
years.add(Integer.toString(i));
}
ArrayAdapter<String> adapter_year = new ArrayAdapter<String>(this.getActivity(),
android.R.layout.simple_spinner_item, years);
Spinner spinYear = (Spinner)rootView.findViewById(R.id.year_spinner);
adapter_year.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinYear.setAdapter(adapter_year);
spinYear.setSelection(curYear);
//Semester Spinner
Spinner spinner = (Spinner) rootView.findViewById(R.id.semester_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter_spinner = ArrayAdapter.createFromResource(this.getActivity(),
R.array.semester_spinner, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter_spinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter_spinner);
spinner.setSelection(curSeason);
return rootView;
}
public void applySemester(View v){
Spinner semesterSpin = (Spinner)rootView.findViewById(R.id.semester_spinner);
Spinner yearSpin = (Spinner)rootView.findViewById(R.id.year_spinner);
//ToStrings
int year = yearSpin.getSelectedItemPosition();
int season = semesterSpin.getSelectedItemPosition();
System.out.println(year + " " + season);
settings.edit().putInt(year_key, year);
settings.edit().putInt(season_key, season);
settings.edit().apply();
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u set\u学期);
如果(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
.add(R.id.container,new SetSemesterFragment()).commit();
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.set\u学期,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
/**
*包含简单视图的占位符片段。
*/
公共静态类SetSemesterFragment扩展了片段{
视图根视图;
共享引用设置;
int YEAR\u DEFAULT\u VALUE=AddCourse.thiswear-AddCourse.baseYear;
int seasure\u默认值=0;
串年键;
弦键;
静态int基准年=2005年;
static int thiswear=Calendar.getInstance().get(Calendar.YEAR);
公共SetSemesterFragment(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
根视图=充气机。充气(R.layout.fragment\u set\u),
货柜(虚假);;
year\u key=getResources().getString(R.string.year\u pref\u str);
seasure\u key=getResources().getString(R.string.seasure\u pref\u str);
按钮b=(按钮)rootView.findviewbyd(R.id.apply\u seurm\u btn);
b、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
applySemester(v);
}
});
设置=this.getActivity().getSharedReferences(getResources().getString(R.string.main\u prefs\u文件),0);
int curYear=settings.getInt(年份键,年份默认值);
int curSeason=settings.getInt(季节键,季节默认值);
System.out.println(“存储值…”+curYear+“”+curSeason);
//旋年器
ArrayList年份=新ArrayList();
对于(int i=基准年;i问题在以下三种陈述中:
settings.edit().putInt(year_key, year);
settings.edit().putInt(season_key, season);
settings.edit().apply();
SharedPrefences方法返回一个新编辑器。在此编辑器上执行的所有操作都保留在内存中,只有在调用apply方法时才会保存到文件中。
因此,每次调用edit()时,都会在新创建的编辑器上执行操作
要解决此问题,请使用以下代码替换上述3行:
SharedPreferences.Editor edit = settings.edit();
edit.putInt(year_key, year);
edit.putInt(season_key, season);
edit.apply();
非常感谢!这成功了。现在我学到了一些东西。