Подтвердить что ты не робот

FindViewById возвращает значение null в представлении <include>

Позвольте прямо понять код.

Код операции, метод onCreate

setContentView(R.layout.main);

View main_view = findViewById(R.id.main_view);
View view_flipper = main_view.findViewById(R.id.vf);
View first_tab = view_flipper.findViewById(R.id.prev_pane);

Код макета main.xml:

<ViewFlipper android:id="@+id/vf"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >  

    <include android:id="@+id/prev_pane" layout="@layout/vf_inner" /> 
<include android:id="@+id/cur_pane" layout="@layout/vf_inner" />
    <include android:id="@+id/next_pane" layout="@layout/vf_inner" />
</ViewFlipper>

Проблема! Главное представление правильно найдено, так же как и ViewFlipper, но prev_pane или cur_pane или next_pane не найдены, возвращается нулевой указатель. Любые идеи, почему?

Эта операция вызывается через вкладку с использованием намерения. Все ссылки разрешены правильно, кроме id on включает

Когда я проверяю переменные, я нахожу содержимое макета vf_inner в файле mChildren

4b9b3361

Ответ 1

Это потому, что теги <include /> не являются реальным видом в вашем иерархическом интерфейсе. Они больше представляют собой команду copy & paste для инструментов Android.

Если вы хотите найти панели во время выполнения, добавьте идентификаторы в корневые элементы включенных макетов. Таким образом, их можно найти через findViewById().

Ответ 2

Одна вещь, которую вы можете сделать, это обернуть операторы <include> внутри родительского макета (который все еще является дочерним элементом вашего основного родительского макета). Дайте этим представлениям разные идентификаторы, чтобы вы могли findViewById каждый из них отдельно.