AddView не работает

Я прочитал, вероятно, все сообщения и документацию, но я до сих пор не могу решить эту проблему.

Я хочу использовать метод addView(), чтобы добавить представление в существующий (рабочий) макет, но по какой-то причине я не могу. Я знаю, что это должно быть легко и просто, но все же я не могу это сделать. Поэтому, пожалуйста, помогите мне.

Вот код:

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); TextView text=new TextView(this); text.setText("test"); layout.addView(text);

Это код, и результатом является то, что я отобразил только те виды, которые определены в XML файле. Нет нового представления, которое я добавил. Когда я отлаживаю, я вижу это добавленное представление как дочерний элемент родителя, к которому я добавил его, но он не отображается.

здесь main.xml:

<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/main1"> <textview android:id="@+id/app_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textcolor="#FFF" android:text="@string/app_title" android:textsize="25dp" android:gravity="center_horizontal"> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:text="@string/main_screen_counter_title" android:textsize="15dp" android:textcolor="#FFF" android:gravity="center_horizontal"> <textview android:id="@+id/frontScreenCounter" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textcolor="#FFF" android:text="@string/reading" android:textsize="33dp" android:gravity="center_horizontal"> <gridview android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnwidth="90dp" android:numcolumns="3" android:verticalspacing="10dp" android:horizontalspacing="10dp" android:stretchmode="columnWidth" android:gravity="center" android:textcolor="#888"> </gridview></textview></textview></textview></linearlayout>

Пожалуйста, помогите. Это приведет меня в бешенство!

4 ответа

Вы забыли указать LayoutParameters для вновь добавленного представления.

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); TextView text=new TextView(this); text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); text.setText("test"); layout.addView(text);

ИЗМЕНИТЬ

GridView с идентификатором @+id/gridview определяется с высотой макета fill_parent, оставляя вам свободное место для добавления нового представления. Изменение высоты до wrap_content может решить вашу проблему.

Добавление комментария к этому сообщению, чтобы помочь другим легко проверить решение.


У меня была такая же проблема, и я потратил несколько раз на то, чтобы найти причину.

Моя ошибка заключалась в том, что я добавлял CustomView, у которого match_parent был установлен как высота.

Я надеюсь сэкономить драгоценное время любому, кто сделал эту глупую досадную ошибку:)

TextView tv = new TextView(this);
lytMarks.addView(tv);
CustomView cv = new CustomView(this, someObject);
lytMarks.addView(cv); // <-- This one had height = match_parent!!
EditText et = new EditText(this);
lytMarks.addView(et);


Ваше содержимое linearLayout находится над родительским представлением. поэтому вам нужно использовать ScrollView. например:

<!--?xml version="1.0" encoding="utf-8"?-->
<scrollview xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent">
<linearlayout android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/main1" android:orientation="vertical"> <textview android:id="@+id/app_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/app_title" android:textcolor="#FFF" android:textsize="25dp"> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:gravity="center_horizontal" android:text="@string/main_screen_counter_title" android:textcolor="#FFF" android:textsize="15dp"> <textview android:id="@+id/frontScreenCounter" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/reading" android:textcolor="#FFF" android:textsize="33dp"> </textview></textview></textview></linearlayout>
</scrollview>


Я не помню, но, возможно, есть какой-либо метод "обновления" для повторной загрузки макета.

Попробуйте layout.invalidate();

licensed under cc by-sa 3.0 with attribution.