我的活动有问题。
我的线性布局中有三个视图存根,如下所示 -
<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 为假。编辑文本的输出如下:
1300373517172
1300373517192
1300373517221
但是,当我旋转屏幕并第二次调用 onCreate 时,输出是这样的:
1300373517221
1300373517221
1300373517221
最初这让我认为你应该只膨胀一次视图,并且层次结构保持在 onCreate 之间......但是当我第一次运行它时,第二次没有显示存根的视图。
<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 的引用。
编辑文本:android.widget.EditText@47210fe8
编辑文本:android.widget.EditText@47212ba8
因此它们再次膨胀,但文本设置为第一次通过时设置的最后一个编辑文本。