重新返回到同一页面后,在文本视图中未显示的微调器的选定值

问题描述:

我遇到了未使textview保留从微调器值列表中选择的值的问题。导航到相同的页面后,它会继续返回到相同的值,而不是用户选择的值。 这是我写的代码。谢谢。重新返回到同一页面后,在文本视图中未显示的微调器的选定值

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())); 

} 

enter image description hereenter image description here

左侧的图像是已经从喷丝选择在用户后TextView的显示的值。

右边的图片显示在TextView中恢复为默认值,而不是保留用户的选择

+0

需要切换?所有案件都有相同的代码! –

您试图在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; 
     } 
    } 
} 
+0

谢谢!有用! :) – Sofia

你可以尝试editor.commit();editor.apply();

也是你的编辑器定义正确吗?你能分享它的声明吗?

你必须实现onPause()onResume()你有Spinner的任何地方(Activity或Fragment)的回调。

@Override 
    protected void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 

现在,当您回到上一个屏幕时,您的微调控制器已保存在您之前更改的内容上;你会看到更新的微调。