アクティビティにバグがあります。
線形レイアウトに3つのビュースタブがあります-
<ViewStub
android:id="@+id/index_1"
android:layout="@layout/index_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ViewStub
android:id="@+id/index_2"
android:layout="@layout/index_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ViewStub
android:id="@+id/index_3"
android:layout="@layout/index_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
私のonCreateは、何を膨らませるかを条件付きでチェックします。
for (int i = 0; i < 3; i++) {
int id = convertIndexToId(i); //will turn i into R.id.index_1
ViewStub stub = findViewById(id);
if (bShouldBeSpinner) {
stub.setLayoutResource(R.layout.index_spinner);
View root = stub.inflate();
Spinner spin = (Spinner)root.findViewById(R.id.my_spinner);
spinner.setAdapter(adapter);
spinner.setSelection(0);
}
else {
stub.setLayoutResource(R.layout.index_edittext);
View root = stub.inflate();
EditText et = (EditText)root.findViewById(R.id.my_edittext);
//et.phoneHome(); just kidding
et.setText(String.valueOf(System.currentTimeMillis()));
}
}
bShouldBeSpinnerをfalseに強制します。
エディットテキストの出力は次のとおり
です
。130037351717213003735171921300373517221
ただし、画面を回転させてonCreateが2回呼び出されると、出力は次のようになります
。1300373517221
1300373517221
1300373517221
最初は、ビューを1回だけ膨らませるべきだと思いました。階層は、onCreateの間に保持されます...ただし、2回目だけ実行すると、スタブのビューは表示されません。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Spinner style="@style/SearchInput" android:id="@+id/my_spinner" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText style="@style/SearchInput" android:id="@+id/my_edittext" />
</LinearLayout>
ドキュメントは、私が気づかなかったか、欠落しているものを想定しているように感じます。誰かが私が間違っていることを見ていますか?
編集
ビュースタブにandroid:inflatedId ="index_1_root"...などを追加しました
forループの後にこれらの行を追加すると、これは最も奇妙なことです。
EditText v = indexRoot1.findViewById(R.id.index_edit_text);
Log.d(TAG, "EditTExt: " + v);
EditText v2 = indexRoot2.findViewById(R.id.index_edit_text);
Log.d(TAG, "EditTExt: " + v2);
出力には、(私は信じていますが)それらは異なるEditTextsへの参照であると書かれています。
EditTExt:android.widget.EditText@47210fe8
EditTExt:android.widget.EditText@47212ba8
したがって、それらは再び膨らみますが、テキストは最初のパスで最後の編集テキストが設定されたものに設定されます。