2017-03-01 74 views
0

我对android非常陌生,但无法保存我的活动状态,特别是我的纺纱者,因此他们保留了自己的价值。在活动之间保存纺纱者的状态

我已经尝试了savedinstancestate和首选项,我仍然可以不工作,只是想知道如果有人可以看看我的代码,看看我出错了。

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

} 
+0

你可能想解释你有什么问题。 – miken32

+0

我试图让用户在两次活动之间导航时保​​持他们的选择,目前他们每次都会被擦掉。 – Cambino

回答

0

我认为Spinners会自动维护它们的状态,当您在布局xml中为它们提供唯一的身份标识时。如果情况并非如此,则应像使用onSaveInstanceState一样。 如果你的代码如上所示,我绝对想知道为什么你没有收到NullpointerException。在你设定旧的Spinner'状态之前,即使你已经在你的新活动中初始化了它们。因此,尝试在if块之前移动最后的方法调用。那么它应该工作:

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

    SubmitMainActivity(); 
    SpinnerGrades(); 

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

} 
+0

感谢您的回复,我试着按照您的说法行事,但它没有奏效,还有其他方式可以节省纺纱厂的投入吗? – Cambino