У меня есть ViewHolder, который содержит ViewStub
, когда я хочу привязать данные к своему представлению, я сначала проверяю, что viewStub
раздуто раньше или нет?
if (mViewStub != null) //still not inflated
тогда, если mViewStub
все еще не надут, я пытаюсь надуть это:
LinearLayout root = ((LinearLayout) mViewStub.inflate());
но здесь я получаю исключение:
java.lang.IllegalStateException: ViewStub должен иметь ненулевое представление ViewGroupParent
Я проверил этот ответ и обнаружил, что это исключение будет выдано, когда родительский элемент ViewStub равен нулю. Отладкой я обнаружил, что это правда, и родитель моего mViewStub
был нулевым.
XML-файл очень прост:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_view"
android:layout_width="60dp"
android:layout_height="100dp"
>
<ViewStub
android:id="@+id/view_cell_stub"
android:layout="@layout/item_card"
android:layout_width="60dp"
android:layout_height="100dp"/>
</FrameLayout>
Я должен упомянуть, что ViewStub
объект не создается во время выполнения, и я просто нахожу это по Id в классе ViewHolder.
ViewStub mViewStub = itemView.findViewById(R.id.view_cell_stub);
Наконец, после этого объяснения мой главный вопрос: «почему родительский элемент mViewStub
обнуляется?»