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

1

Предположим, что у меня есть простой 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. В настоящее время я делаю это безуспешно:

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

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

Теги:

1 ответ

1

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

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

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

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

  • 0
    Argh, оказывается, это было так просто! Под неудачей я имел в виду, что мой контент не был виден. Однако это было потому, что я использовал fill_parent, который занимал всю видимую область. Спасибо, Hackbod.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню