Как в привязке данных программно настроить корневой вид моего макета, чтобы он стал еще одним сложным макетом?

avatar
bycfly
8 апреля 2018 в 04:13
308
1
0

Я пытаюсь создать страницу ошибки для каждого из моих действий, где в случае сетевой ошибки будет отображаться эта страница ошибки. У некоторых действий есть два фрагмента, у некоторых есть представление Recycler, у некоторых есть панель инструментов и так далее.

Я пытаюсь реализовать этот метод showErrorPage() в классе BaseActivity как универсальный метод для всех действий, которые его расширяют. Я думаю, что получу корневое представление с помощью binding.getRoot(), тогда мне нужен какой-то способ скрыть все, что это представление, и заменить его на error_page.xml, который является корневым представлением для всех привязок данных, и он содержит LinearLayout, который включает TextView И ImageView

Источник
Cvarier
12 апреля 2018 в 23:40
0

Вы нашли мой ответ полезным?

Ответы (1)

avatar
Cvarier
8 апреля 2018 в 05:36
2

Я бы определенно не стал пытаться сделать это так, как вы упомянули, так как это было бы излишне сложно. На самом деле вам никогда не придется этого делать, так как такой простой интерфейс не должен проектироваться. Вместо этого я, вероятно, создал бы фрагмент, который раздувает файл error_page.xml в качестве корневого представления.

Другой подход, который вы можете попробовать, заключается в том, чтобы окружить файл error_page.xml тегами <merge> и использовать теги <include> в каждом из макетов действий/фрагментов, которые вы хотите отобразить в макете ошибки (см. https:/ /developer.android.com/training/improving-layouts/reusing-layouts.html#Merge). Убедитесь, что ваш <include> находится внизу каждого макета.

Затем в каждом макете, содержащем ваш тег <include>, я бы установил android:visibility="gone", android:layout_width="match_parent", android:layout_height="match_parent" в теле включения и присвоил ему идентификатор. В вашем методе showErrorPage() вы можете установить видимость включенного макета, используя его идентификатор, на View.VISIBLE.