Java 在活动之间保存微调器的状态

Java 在活动之间保存微调器的状态,java,android,Java,Android,我对android非常陌生,但在保存我的活动状态,特别是我的微调器以保持其价值时遇到了困难 我已经尝试了savedinstancestate和preferences,但我仍然无法使两者都起作用,只是想知道是否有人可以看看我的代码,看看我哪里出了问题 public class YearOneActivity extends AppCompatActivity { Button ButtonSubmit; Spinner SpinnerGradesUnitOne, SpinnerGradesUni

我对android非常陌生,但在保存我的活动状态,特别是我的微调器以保持其价值时遇到了困难

我已经尝试了savedinstancestate和preferences,但我仍然无法使两者都起作用,只是想知道是否有人可以看看我的代码,看看我哪里出了问题

public class YearOneActivity extends AppCompatActivity {

Button ButtonSubmit;
Spinner SpinnerGradesUnitOne, SpinnerGradesUnitTwo, SpinnerGradesUnitThree, SpinnerGradesUnitSix, SpinnerGradesUnitNine, SpinnerGradesUnitTwentySix, SpinnerGradesUnitEighteen, SpinnerGradesUnitTwentyEight, SpinnerGradesUnitFortyThree;
int spinnerUnit1;

public void SubmitMainActivity(){
    ButtonSubmit = (Button)findViewById(R.id.button_submit);
    ButtonSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent SubmitMainActivity = new Intent(YearOneActivity.this, MainActivity.class);

            startActivity(SubmitMainActivity);
        }
    });
}

public void SpinnerGrades(){
    SpinnerGradesUnitOne = (Spinner) findViewById(R.id.spinner_grades_unit_one);
    SpinnerGradesUnitTwo = (Spinner) findViewById(R.id.spinner_grades_unit_two);
    SpinnerGradesUnitThree = (Spinner) findViewById(R.id.spinner_grades_unit_three);
    SpinnerGradesUnitSix = (Spinner) findViewById(R.id.spinner_grades_unit_six);
    SpinnerGradesUnitNine = (Spinner) findViewById(R.id.spinner_grades_unit_nine);
    SpinnerGradesUnitTwentySix = (Spinner) findViewById(R.id.spinner_grades_unit_twentysix);
    SpinnerGradesUnitEighteen = (Spinner) findViewById(R.id.spinner_grades_unit_eighteen);
    SpinnerGradesUnitTwentyEight = (Spinner) findViewById(R.id.spinner_grades_unit_twentyeight);
    SpinnerGradesUnitFortyThree = (Spinner) findViewById(R.id.spinner_grades_unit_fortythree);

    String[] spinnerArrayGrades = getResources().getStringArray(R.array.spinner_grades);
    ArrayAdapter<String> adapterGrades = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerArrayGrades);

    SpinnerGradesUnitOne.setAdapter(adapterGrades);

    SpinnerGradesUnitTwo.setAdapter(adapterGrades);
    SpinnerGradesUnitThree.setAdapter(adapterGrades);
    SpinnerGradesUnitSix.setAdapter(adapterGrades);
    SpinnerGradesUnitNine.setAdapter(adapterGrades);
    SpinnerGradesUnitTwentySix.setAdapter(adapterGrades);
    SpinnerGradesUnitEighteen.setAdapter(adapterGrades);
    SpinnerGradesUnitTwentyEight.setAdapter(adapterGrades);
    SpinnerGradesUnitFortyThree.setAdapter(adapterGrades);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_year_one);

    if (savedInstanceState != null){

        SpinnerGradesUnitOne.setSelection(savedInstanceState.getInt("spinnerUnit1", 0));
        SpinnerGradesUnitTwo.setSelection(savedInstanceState.getInt("spinnerUnit2", 0));
        SpinnerGradesUnitThree.setSelection(savedInstanceState.getInt("spinnerUnit3", 0));
        SpinnerGradesUnitSix.setSelection(savedInstanceState.getInt("spinnerUnit6", 0));
        SpinnerGradesUnitNine.setSelection(savedInstanceState.getInt("spinnerUnit9", 0));
        SpinnerGradesUnitTwentySix.setSelection(savedInstanceState.getInt("spinnerUnit26", 0));
        SpinnerGradesUnitEighteen.setSelection(savedInstanceState.getInt("spinnerUnit18", 0));
        SpinnerGradesUnitTwentyEight.setSelection(savedInstanceState.getInt("spinnerUnit28", 0));
        SpinnerGradesUnitFortyThree.setSelection(savedInstanceState.getInt("spinnerUnit43", 0));

    }

    SubmitMainActivity();
    SpinnerGrades();

}

@Override
public  void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putInt("spinnerUnit1", SpinnerGradesUnitOne.getSelectedItemPosition());
    outState.putInt("spinnerUnit2", SpinnerGradesUnitTwo.getSelectedItemPosition());
    outState.putInt("spinnerUnit3", SpinnerGradesUnitThree.getSelectedItemPosition());
    outState.putInt("spinnerUnit6", SpinnerGradesUnitSix.getSelectedItemPosition());
    outState.putInt("spinnerUnit9", SpinnerGradesUnitNine.getSelectedItemPosition());
    outState.putInt("spinnerUnit26", SpinnerGradesUnitTwentySix.getSelectedItemPosition());
    outState.putInt("spinnerUnit18", SpinnerGradesUnitEighteen.getSelectedItemPosition());
    outState.putInt("spinnerUnit28", SpinnerGradesUnitTwentyEight.getSelectedItemPosition());
    outState.putInt("spinnerUnit43", SpinnerGradesUnitFortyThree.getSelectedItemPosition());

}
公共类YearOneActivity扩展了AppCompatActivity{
按钮提交;
喷丝头喷丝头等级SUnitone、喷丝头等级SUnittwo、喷丝头等级SUnitthree、喷丝头等级SUnitix、喷丝头等级SUnitnine、喷丝头等级SUnitwenty六、喷丝头等级SUniteight、喷丝头等级SUnitwenty八、喷丝头等级SUnitthree;
int喷丝头1;
公共无效提交不活动(){
ButtonsSubmit=(Button)findViewById(R.id.Button\u submit);
ButtonsSubmit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent SubmitMainActivity=新的Intent(YearOneActivity.this,MainActivity.class);
STARTACTIVE(不活动);
}
});
}
公共空间喷丝板等级(){
喷丝头等级SUNITONE=(喷丝头)findViewById(R.id.喷丝头等级单位);
喷丝头等级SUnittwo=(喷丝头)findViewById(R.id.喷丝头等级单位二);
喷丝头等级SUnitthree=(喷丝头)findViewById(R.id.喷丝头等级单位三);
喷丝头等级SUNITSIX=(喷丝头)findViewById(R.id.喷丝头等级单位六);
喷丝头等级SUnitnine=(喷丝头)findViewById(R.id.喷丝头等级单位);
喷丝头等级SUnitwentysix=(喷丝头)findViewById(R.id.喷丝头等级单位二十六);
喷丝头等级SUNITEIGHTEEN=(喷丝头)findViewById(R.id.喷丝头等级单位十八);
喷丝头等级SUnitwentyeight=(喷丝头)findViewById(R.id.喷丝头等级单位二十八);
喷丝头等级SUnitfortyTree=(喷丝头)findViewById(R.id.喷丝头等级单位fortyTree);
String[]spinneraygrades=getResources().getStringArray(R.array.spinner_grades);
ArrayAdapter adapterGrades=新的ArrayAdapter(此,android.R.layout.simple\u微调器\u项,SpinNerayGrades);
喷丝头等级Sunitone.setAdapter(adapterGrades);
喷丝头等级双套适配器(adapterGrades);
喷丝头等级三套适配器(adapterGrades);
喷丝头等级Sunitsix.setAdapter(adapterGrades);
喷丝头等级Sunitnine.setAdapter(adapterGrades);
喷丝头等级不超过26。设置适配器(adapterGrades);
喷丝头等级Suniteighten.setAdapter(adapterGrades);
喷丝头等级不超过二十度。设置适配器(adapterGrades);
喷丝头等级SunitFortythTree.setAdapter(adapterGrades);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u year\u one);
如果(savedInstanceState!=null){
SpinnerGradesUnitOne.setSelection(savedInstanceState.getInt(“spinnerUnit1”,0));
喷丝头等级ITTWO.setSelection(savedInstanceState.getInt(“喷丝头单元2”,0));
SpinnerGradesUnitThree.setSelection(savedInstanceState.getInt(“spinnerUnit3”,0));
喷丝头等级SUNITSIX.setSelection(savedInstanceState.getInt(“喷丝头单元6”,0));
喷丝头等级sunitnine.setSelection(savedInstanceState.getInt(“喷丝头单元9”,0));
喷丝头等级UnittwentySix.setSelection(savedInstanceState.getInt(“喷丝头单元26”,0));
喷丝头等级SUniteighten.setSelection(savedInstanceState.getInt(“喷丝头单元18”,0));
SpinnerGradeSunitwentyeight.setSelection(savedInstanceState.getInt(“spinnerUnit28”,0));
SpinnerGradeSunitfortyTree.setSelection(savedInstanceState.getInt(“spinnerUnit43”,0));
}
不活动();
喷丝头等级();
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putInt(“spinnerUnit1”,SpinnerGradesUnitOne.getSelectedItemPosition());
outState.putInt(“spinnerUnit2”,SpinnerGradesUnitTwo.getSelectedItemPosition());
outState.putInt(“spinnerUnit3”,SpinnerGradesUnitThree.getSelectedItemPosition());
outState.putInt(“spinnerUnit6”,SpinnerGradeSunitix.getSelectedItemPosition());
outState.putInt(“spinnerUnit9”,SpinnerGradesUnitNine.getSelectedItemPosition());
outState.putInt(“spinnerUnit26”,SpinnerGradeSunitwentySix.getSelectedItemPosition());
outState.putInt(“spinnerUnit18”,SpinnerGradeSuniteighten.getSelectedItemPosition());
outState.putInt(“spinnerUnit28”,SpinnerGradeSunitwentyeight.getSelectedItemPosition());
outState.putInt(“spinnerUnit43”,SpinnerGradeSunitfortyTree.getSelectedItemPosition());
}

当您在布局xml中为微调器提供唯一的I'd时,我认为微调器会自动保持其状态。如果不是这样,您应该像以前一样使用onSaveInstanceState。 如果您的代码如上所示,我绝对想知道为什么您没有收到NullpointerException。此时,您在新活动中初始化旧微调器状态之前就设置了它们。因此,请尝试将最后一个方法调用移到If块之前。这样应该可以工作:

@Override
protected void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_year_one);

    SubmitMainActivity();
    SpinnerGrades();

    if (savedInstanceState != null) {
        // ...
    }

}

您可能想解释您遇到的问题是什么。我正在尝试让微调器在用户在活动之间导航时保持其选择,目前它们每次都会被擦除。感谢您的回复,我尝试按照您所说的操作,但没有效果,是否有其他方法保存微调器输入?