无法保存微调器状态 android
can't save spinner state android
我尝试了一个教程,但我无法保存微调器的状态。
这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
setContentView(R.layout.activity_main);
//language selection list
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.language_list, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// storing string resources into Array
lang_list = getResources().getStringArray(R.array.language_list);
Toast.makeText(getBaseContext(), "You have selected : " + lang_list[index],
Toast.LENGTH_SHORT).show();
choice = spinner.getSelectedItem().toString();
spinnerPos = arg2;
final ImageView country_flag = (ImageView)findViewById(R.id.country);
String s=((TextView)arg1).getText().toString();
if(s.equals("English"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.eng_spinner));
if(s.equals("German"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.german_spinner));
if(s.equals("French"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.french_spinner));
if(s.equals("Spanish"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.spanish_spinner));
}
/*private int getPersistedItem() {
String keyName = makePersistedItemKeyName();
return PreferenceManager.getDefaultSharedPreferences(MainActivity.this).getInt(keyName, 0);
}
protected void setPersistedItem(int position) {
String keyName = makePersistedItemKeyName();
PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit().putInt(keyName, position).commit();
}
private String makePersistedItemKeyName() {
return currentUserName + "_your_key";
}*/
public void onNothingSelected(AdapterView<?> arg0) {
// do nothing
}
});
}
}
要保存状态(这些在 oncreate 之后):
protected void onResume(){
super.onResume();
spinner.setSelection(spinnerPos);
}
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("spinnerIndex", spinnerPos);
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was saved");
}
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getInt("spinnerIndex");
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored");
}
即使应用已关闭或 activity 已停止,我仍试图保存微调器状态。有人可以解释为什么它不起作用。
onRestoreInstanceState 您必须将保存的值分配给 spinnerPos,如下所示:
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
spinnerPos = savedInstanceState.getInt("spinnerIndex");
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored");}
我使用共享首选项让它工作,
我得到微调器位置:
spinnerPos = arg2;
我在 onCreate 中创建了 set/initialize 共享首选项:
SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0);
使用微调器位置的共享首选项的 onStop 方法:
protected void onStop(){
super.onStop();
SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0);
SharedPreferences.Editor editor = spinnersaving.edit();
editor.putInt("spinnerPos", spinnerPos);
editor.commit();
}
在微调器点击侦听器函数之前,我从 sharepreferences 获取微调器位置并将其设置到微调器上:
spinner.setSelection(spinnersaving.getInt("spinnerPos", 0));
然后就成功了。 :)
我尝试了一个教程,但我无法保存微调器的状态。
这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
setContentView(R.layout.activity_main);
//language selection list
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.language_list, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// storing string resources into Array
lang_list = getResources().getStringArray(R.array.language_list);
Toast.makeText(getBaseContext(), "You have selected : " + lang_list[index],
Toast.LENGTH_SHORT).show();
choice = spinner.getSelectedItem().toString();
spinnerPos = arg2;
final ImageView country_flag = (ImageView)findViewById(R.id.country);
String s=((TextView)arg1).getText().toString();
if(s.equals("English"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.eng_spinner));
if(s.equals("German"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.german_spinner));
if(s.equals("French"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.french_spinner));
if(s.equals("Spanish"))
country_flag.setImageDrawable(getResources().getDrawable(R.drawable.spanish_spinner));
}
/*private int getPersistedItem() {
String keyName = makePersistedItemKeyName();
return PreferenceManager.getDefaultSharedPreferences(MainActivity.this).getInt(keyName, 0);
}
protected void setPersistedItem(int position) {
String keyName = makePersistedItemKeyName();
PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit().putInt(keyName, position).commit();
}
private String makePersistedItemKeyName() {
return currentUserName + "_your_key";
}*/
public void onNothingSelected(AdapterView<?> arg0) {
// do nothing
}
});
}
}
要保存状态(这些在 oncreate 之后):
protected void onResume(){
super.onResume();
spinner.setSelection(spinnerPos);
}
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("spinnerIndex", spinnerPos);
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was saved");
}
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getInt("spinnerIndex");
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored");
}
即使应用已关闭或 activity 已停止,我仍试图保存微调器状态。有人可以解释为什么它不起作用。
onRestoreInstanceState 您必须将保存的值分配给 spinnerPos,如下所示:
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
spinnerPos = savedInstanceState.getInt("spinnerIndex");
Log.d("SpinnerState", "Spinner at position " + spinnerPos + " was restored");}
我使用共享首选项让它工作,
我得到微调器位置:
spinnerPos = arg2;
我在 onCreate 中创建了 set/initialize 共享首选项:
SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0);
使用微调器位置的共享首选项的 onStop 方法:
protected void onStop(){ super.onStop(); SharedPreferences spinnersaving = getSharedPreferences("spinnerstate",0); SharedPreferences.Editor editor = spinnersaving.edit(); editor.putInt("spinnerPos", spinnerPos); editor.commit(); }
在微调器点击侦听器函数之前,我从 sharepreferences 获取微调器位置并将其设置到微调器上:
spinner.setSelection(spinnersaving.getInt("spinnerPos", 0));
然后就成功了。 :)