Как программно добавить представление в ViewFlipper

Я имею после основного расположения:

<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);

У меня нет идеи что не так с моим кодом. Я решил поместить все свои представления в один файл, но я все еще хочу знать, как исправить мой первоначальный код.

13
задан RedBlueThing 6 May 2011 в 23:35
поделиться

1 ответ

Yout View viewUrl = (View) findViewById (R.layout.view_url); неверно. findViewById похож на метод get (String key) для каталога, в котором ваш каталог является вашим текущим представлением / действием. Он ищет только элемент с этим идентификатором под его дочерними элементами.

Чтобы создать объекты Java из файлов XML, которые вам нужно использовать, вам необходимо использовать LayoutInflater . Что довольно просто, из этого вы получаете объект, который можете передать методу viewstack.addView (..).

Другой способ добиться этого - просто включить другие XML-файлы в первый, используя теги include , merge или ViewStub ]. В зависимости от ваших требований это может быть не вариант, но то, что вы описываете, должно быть, и вы должны использовать их вместо того, чтобы делать это программно, потому что это просто чище.

8
ответ дан 2 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: