再次返回同一页面后,Spinner 的选定值未显示在 textview 中
Selected Value of Spinner not displayed at textview after going back to the same page again
我遇到了一个问题,即没有让文本视图保留从微调器值列表中选择的值。导航到同一页面后,它只是继续返回相同的值,而不是用户选择的值。
这是我写的代码。谢谢。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notifications);
final Switch mySwitch = (Switch) findViewById(R.id.switchNot);
final Spinner mySpin = (Spinner) findViewById(R.id.spinNot);
final TextView tvNot = (TextView) findViewById(R.id.tvTime);
mySwitch.setOnClickListener(new View.OnClickListener() {
SharedPreferences.Editor editor = getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE).edit();
@Override
public void onClick(View v) {
if (mySwitch.isChecked()) {
editor.putBoolean("Switch", true);
editor.commit();
editor.putBoolean("Spinner",true);
editor.commit();
mySpin.setEnabled(true);
} else {
editor.putBoolean("Switch", false);
editor.commit();
editor.putBoolean("Spinner",false);
editor.commit();
mySpin.setEnabled(false);
}
}
});
final SharedPreferences sharedPrefs =
getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE);
mySwitch.setChecked(sharedPrefs.getBoolean("Switch", false));
mySpin.setEnabled(sharedPrefs.getBoolean("Spinner",false));
mySpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
SharedPreferences.Editor editor = getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE).edit();
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch(position){
case 0:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 1:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 2:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 3:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent){
}
});
tvNot.setText(sharedPrefs.getString("Option", mySpin.getSelectedItem().toString()));
}
左边的图片是用户从微调器中选择后在textview中显示的值。
右图为textview处的值恢复默认,不保留用户选择
您必须在任何有 Spinner 的地方(Activity 或 Fragment)实现 onPause()
和 onResume()
回调。
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
现在,当您返回到上一个屏幕时,您的 Spinner 已经保存了您之前更改的内容;您将看到更新后的微调器。
您正在尝试在 textView
中设置,但每次您进入时它都会尝试在微调器中设置默认值 0,因此我们应该获取该值,然后我们可以尝试像下面这样设置它
而不是下面一行
tvNot.setText(sharedPrefs.getString("Option", mySpin.getSelectedItem().toString()));
改成这样
String selectedValue = sharedPrefs.getString("Option",
mySpin.getSelectedItem().toString());
if (!TextUtils.isEmpty(selectedValue)) {
for (int i = 0; i < mySpin.getAdapter().getCount(); i++) {
String value = (String) mySpin.getAdapter().getItem(i);
if (selectedValue.equalsIgnoreCase(value)) {
mySpin.setSelection(i);
break;
}
}
}
我遇到了一个问题,即没有让文本视图保留从微调器值列表中选择的值。导航到同一页面后,它只是继续返回相同的值,而不是用户选择的值。 这是我写的代码。谢谢。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notifications);
final Switch mySwitch = (Switch) findViewById(R.id.switchNot);
final Spinner mySpin = (Spinner) findViewById(R.id.spinNot);
final TextView tvNot = (TextView) findViewById(R.id.tvTime);
mySwitch.setOnClickListener(new View.OnClickListener() {
SharedPreferences.Editor editor = getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE).edit();
@Override
public void onClick(View v) {
if (mySwitch.isChecked()) {
editor.putBoolean("Switch", true);
editor.commit();
editor.putBoolean("Spinner",true);
editor.commit();
mySpin.setEnabled(true);
} else {
editor.putBoolean("Switch", false);
editor.commit();
editor.putBoolean("Spinner",false);
editor.commit();
mySpin.setEnabled(false);
}
}
});
final SharedPreferences sharedPrefs =
getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE);
mySwitch.setChecked(sharedPrefs.getBoolean("Switch", false));
mySpin.setEnabled(sharedPrefs.getBoolean("Spinner",false));
mySpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
SharedPreferences.Editor editor = getSharedPreferences("mapp.com.sg.sadtrial", MODE_PRIVATE).edit();
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch(position){
case 0:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 1:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 2:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
case 3:
tvNot.setText(mySpin.getSelectedItem().toString());
editor.putString("Option", mySpin.getSelectedItem().toString());
editor.commit();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent){
}
});
tvNot.setText(sharedPrefs.getString("Option", mySpin.getSelectedItem().toString()));
}
左边的图片是用户从微调器中选择后在textview中显示的值。
右图为textview处的值恢复默认,不保留用户选择
您必须在任何有 Spinner 的地方(Activity 或 Fragment)实现 onPause()
和 onResume()
回调。
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
现在,当您返回到上一个屏幕时,您的 Spinner 已经保存了您之前更改的内容;您将看到更新后的微调器。
您正在尝试在 textView
中设置,但每次您进入时它都会尝试在微调器中设置默认值 0,因此我们应该获取该值,然后我们可以尝试像下面这样设置它
而不是下面一行
tvNot.setText(sharedPrefs.getString("Option", mySpin.getSelectedItem().toString()));
改成这样
String selectedValue = sharedPrefs.getString("Option",
mySpin.getSelectedItem().toString());
if (!TextUtils.isEmpty(selectedValue)) {
for (int i = 0; i < mySpin.getAdapter().getCount(); i++) {
String value = (String) mySpin.getAdapter().getItem(i);
if (selectedValue.equalsIgnoreCase(value)) {
mySpin.setSelection(i);
break;
}
}
}