Вклад RelativeLayout и ViewStub

У меня есть следующий макет.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/list_item_bottom"> <TextView android:id="@+id/list_item_name" android:layout_width="match_parent" android:layout_height="wrap_content"/> <ViewStub android:id="@+id/stub_for_alt_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/list_item_name" android:layout="@layout/text_view_alt_name"/> <ImageView android:id="@+id/list_item_dopinfo1_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/stub_for_alt_name" android:src="@drawable/ic_released"/> </RelativeLayout> 

Я хочу, чтобы ViewStub был ниже TextView и ImageView, чтобы быть ниже ViewStub.

Элементы с затененным ViewStub показаны, как я ожидаю. Но элементы без ViewStub имеют TextView, перекрывающийся с ImageView.

Что случилось с моим макетом?

ОБНОВИТЬ:

Единственное решение, которое я нашел, – предоставить ViewStub и связанный TextView с тем же значением android:id .

Я знаю, что это старый вопрос, но трюк заключается в том, чтобы установить параметр inflatedId таким же, как сам фактический viewStub, например:

 <ViewStub android:id="@+id/stub_for_alt_name" android:inflatedId="@id/stub_for_alt_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/list_item_name" android:layout="@layout/text_view_alt_name"/> 

Единственное решение, которое я нашел, – предоставить ViewStub и связанный TextView с тем же значением android:id .

Это старый вопрос, но у меня есть полезное дополнение

1) Да, как и другие опубликовали – используйте тот же id и inflatedId :

 <ViewStub android:id="@+id/view_stub_id" android:inflatedId="@id/view_stub_id" ... /> 

2) Когда вам нужно раздуть просмотр или обновить его содержимое, удобно действовать следующим образом:

  View v = parentView.findViewById(R.id.view_stub_id); if (v instanceof ViewStub) v = ((ViewStub) v).inflate(); // here v is always the inflated view // ... 
 Hi you can try this one. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/list_item_bottom"> //you can add another relative layout containing your textview and imageview <RelativeLayout android:id="@+id/layout_content" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/list_item_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/list_item_dopinfo1_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/stub_for_alt_name" android:src="@drawable/ic_released" android:layout_below="@+id/list_item_name" /> </RelativeLayout> <ViewStub android:id="@+id/stub_for_alt_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/list_item_name" android:layout="@layout/text_view_alt_name" android:layout_below="@+id/layout_content" /> </RelativeLayout>