Возможно ли динамически добавлять представления в макет на основе XML?

#android

#Android

Вопрос:

Допустим, у меня есть простой XML-макет, такой как следующий:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@ id/my_container"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <LinearLayout android:id="@ id/leftContainer"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content"
           android:text="Col A - Text 1"
        /> 
    </LinearLayout>
    <LinearLayout android:id="@ id/rightContainer"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content"
           android:text="Col B - Text 1"
        /> 
    </LinearLayout>
</LinearLayout>
  

Затем я хочу добавить TextView в линейное описание RightContainer. В настоящее время я делаю это безуспешно:

 LinearLayout container = (LinearLayout) findViewById(R.id.rightContainer);
TextView textToAdd = new TextView(this);
textToAdd.setText("Col B - Text 2");
container.addView(textToAdd);
  

Я просмотрел LayoutInflater, но не уверен, как бы я использовал его здесь. Буду признателен за любую помощь, спасибо! Если я попытаюсь вызвать setContentView (контейнер), я получу сообщение об ошибке принудительного закрытия.

Ответ №1:

Не вызывайте setContentView (), если вы используете findViewById(), то это представление уже находится внутри вашего текущего установленного содержимого.

Добавление представлений работает нормально. Все, что представляет собой XML-макет, — это описание представлений для создания и добавления в иерархию. Убедитесь, что вы передаете правильные параметры макета при добавлении представления — здесь, поскольку контейнер является LinearLayout, вам нужно LinearLayout.Параметры компоновки.

Вы не говорите, каким образом ваш код «неудачен», поэтому трудно помочь в дальнейшем.

Также вы можете использовать hierarchyviewer, чтобы посмотреть, что на самом деле происходит в вашей иерархии представлений.

Комментарии:

1. Ого, оказывается, это было так просто!! Под «безуспешно» я имел в виду, что мой контент не был виден. Однако это произошло потому, что я использовал fill_parent, который занимал всю видимую область. Спасибо hackbod.