Android 再次返回同一页面后,微调器的选定值不会显示在textview中

Android 再次返回同一页面后,微调器的选定值不会显示在textview中,android,spinner,preferences,shared,Android,Spinner,Preferences,Shared,我面临的问题是,textview无法保留从微调器值列表中选择的值。导航到同一页面后,它只会返回到相同的值,而不是用户选择的值。 这是我写的代码。多谢各位 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_notifications); final Switch mySwitch

我面临的问题是,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()));

}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_通知);
最终开关mySwitch=(开关)findViewById(R.id.switchNot);
最终微调器mySpin=(微调器)findViewById(R.id.spinNot);
最终文本视图tvNot=(文本视图)findViewById(R.id.tvTime);
mySwitch.setOnClickListener(新视图.OnClickListener(){
SharedReferences.Editor Editor=getSharedReferences(“mapp.com.sg.sadtry”,MODE_PRIVATE.edit();
@凌驾
公共void onClick(视图v){
if(mySwitch.isChecked()){
编辑器.putBoolean(“开关”,true);
commit();
putBoolean(“微调器”,true);
commit();
mySpin.setEnabled(true);
}否则{
编辑器.putBoolean(“开关”,false);
commit();
编辑器.putBoolean(“微调器”,false);
commit();
mySpin.setEnabled(false);
}
}
});
最终SharedReferences SharedRefers=
GetSharedReferences(“mapp.com.sg.sadtrial”,MODE_PRIVATE);
setChecked(sharedPrefs.getBoolean(“开关”,false));
setEnabled(sharedPrefs.getBoolean(“微调器”,false));
mySpin.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
SharedReferences.Editor Editor=getSharedReferences(“mapp.com.sg.sadtry”,MODE_PRIVATE.edit();
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
开关(位置){
案例0:
tvNot.setText(mySpin.getSelectedItem().toString());
putString(“Option”,mySpin.getSelectedItem().toString());
commit();
打破
案例1:
tvNot.setText(mySpin.getSelectedItem().toString());
putString(“Option”,mySpin.getSelectedItem().toString());
commit();
打破
案例2:
tvNot.setText(mySpin.getSelectedItem().toString());
putString(“Option”,mySpin.getSelectedItem().toString());
commit();
打破
案例3:
tvNot.setText(mySpin.getSelectedItem().toString());
putString(“Option”,mySpin.getSelectedItem().toString());
commit();
打破
}
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
tvNot.setText(sharedPrefs.getString(“Option”,mySpin.getSelectedItem().toString());
}

左边的图片是用户从微调器中选择后文本视图中显示的值


右边的图片显示了textview返回默认值的值,并且不保留用户的选择

您必须在您有微调器的任何位置(活动或片段)执行
onPause()
onResume()
回调

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

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

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

您正在尝试在
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;
        }
    }
}
String selectedValue=sharedPrefs.getString(“选项”,
mySpin.getSelectedItem().toString());
如果(!TextUtils.isEmpty(selectedValue)){
对于(int i=0;i
需要开关吗?所有案例都有相同的代码!