Я имею после основного расположения:
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<ViewFlipper android:id="@+id/viewstack"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Here I want to add my views which are located in separated xml files. -->
</ViewFlipper>
</LinearLayout>
Вот пример моего представления:
view_url.xml
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:gravity="center">
<EditText android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnGenerate"
android:text="Generate"/>
</LinearLayout>
view_text.xml
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<EditText android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:contentDescription="Enter your text here"
android:layout_width="fill_parent"
android:height="200dp"/>
</LinearLayout>
Я пытаюсь добавить представления:
viewstack = (ViewFlipper) findViewById(R.id.viewstack);));
View viewText = (View) findViewById(R.layout.view_text);
viewstack.addView(viewText); < -- Emulator is crashing at this line
View viewUrl = (View) findViewById(R.layout.view_url);
viewstack.addView(viewUrl);
У меня нет идеи что не так с моим кодом. Я решил поместить все свои представления в один файл, но я все еще хочу знать, как исправить мой первоначальный код.
Yout View viewUrl = (View) findViewById (R.layout.view_url);
неверно. findViewById похож на метод get (String key) для каталога, в котором ваш каталог является вашим текущим представлением / действием. Он ищет только элемент с этим идентификатором под его дочерними элементами.
Чтобы создать объекты Java из файлов XML, которые вам нужно использовать, вам необходимо использовать LayoutInflater . Что довольно просто, из этого вы получаете объект, который можете передать методу viewstack.addView (..).
Другой способ добиться этого - просто включить другие XML-файлы в первый, используя теги include , merge или ViewStub ]. В зависимости от ваших требований это может быть не вариант, но то, что вы описываете, должно быть, и вы должны использовать их вместо того, чтобы делать это программно, потому что это просто чище.