2017-03-01 27 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