Загрузка макета как «это» в Android - PullRequest
0 голосов
/ 01 марта 2012

Это выглядит как неправильный подход, но я все равно спрашиваю.

Задача заключается в том, что у вас есть макет XML, который описывает составной виджет (например, Button + TextView). Вы хотели бы сделать его многократно используемым, поэтому вы создаете класс, подобный MyTextViewButtonWidget - он будет отображать свои текстовые средства доступа к кнопкам и то же самое будет делать для просмотра текста:

public class MyTextViewButtonWidget extends LinearLayout {
    ...
    void setButtonText(String text) { ... }
    String getButtonText() { ... }
    void setTextViewText(String text) { ... }
    String getTextViewText() { ... }
    ...
}

Определение макета выглядит следующим образом:

<LinearLayout ..........>
   ....button and text label here...
</LinearLayout>

Вопрос - как бы вы загрузили этот макет так, чтобы его корень LinearLayout был бы LinearLayout частью MyTextViewButtonWidget?

Попробовал определить ctor MyTextViewButtonWidget вот так:

{
    inflate(getContext(), R.layout.reusable_widget_layout, this);
}

Но это загружает reusable_widget_layout как ребенка до MyTextViewButtonWidget (это не то, что мне нужно).

Как правило, проблема:

  • Вам нужно создать составной виджет
  • Вы хотели бы иметь возможность определить его макет с помощью разметки xml
  • Вы хотите, чтобы он загружал дочерние виджеты root, определенные в xml, как его дочерние виджеты (INSTEAD OF: загружать всю иерархию из xml как один дочерний элемент вашего повторно используемого виджета)

1 Ответ

2 голосов
/ 01 марта 2012

Заменить:

<LinearLayout ..........>
   ....button and text label here...
</LinearLayout>

с:

<merge ..........>
   ....button and text label here...
</merge>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...