私のアプリには UI で表されないデータがないため、画面の回転などのイベントが発生したときに、基になる「モデル」オブジェクトの状態を復元するために UI ウィジェットを読み取ろうとしました。EditText では機能しないようですが、奇妙に思えるスピナーでは機能します。いくつかのコード フラグメントを次に示します。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
metalSpinner = (Spinner) findViewById(R.id.metal_spinner);
....
lengthText = (EditText) findViewById(R.id.length_edittext);
....
createAndInitializeModel();
}
private void createAndInitializeModel() {
vdropModel = new VdropModel();
....
String al = (String) (metalSpinner.getSelectedItem());
vdropModel.setAlum(al.equals("Aluminum"));
....
if (!(lengthText.getText().toString().equals(""))) {
vdropModel.setLengthInFeet(Double.parseDouble(lengthText.getText()
.toString()));
}
}
私には明らかではない何らかの理由で、ウィジェットがまだ値を表示していても、画面の向きの変更が発生した後、createAndInitializeModel() の「if」ステートメントは常に false と評価され、vdropModel は復元されません。ただし、Spinner ウィジェットの値は復元されます。これは私には意味がありません。