addView不起作用

我已经读过所有的post和文档,但我仍然无法解决这个问题。

我想使用addView()方法添加视图到现有的(运行)布局,但由于某种原因,我不能。 我知道这应该是简单而基本的,但我还是不能这样做。 所以,请帮助我。

这是一个代码:

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

这是一个代码,结果是我只显示在xml文件中定义的视图。 我没有添加这个新的观点。 当我debugging时,我看到这个添加的视图作为我已经添加它,但它不显示的父级的孩子。

这里是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" /> </LinearLayout> 

请帮忙。 这会让我疯狂!

Solutions Collecting From Web of "addView不起作用"

您忘记了为新添加的视图指定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); 

编辑

ID为@+id/gridview定义为fill_parent的布局高度,没有空间添加新的视图。 将其高度更改为wrap_content可能会解决您的问题。

添加我的评论到这个职位,以帮助他人轻松validation解决scheme。

我有同样的问题,浪费了几次find原因。

我的错是我添加了一个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" /> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="3" android:stretchMode="columnWidth" android:textColor="#888" android:verticalSpacing="10dp" /> </LinearLayout> </ScrollView> 

我不记得,但也许有任何“刷新”的方法来加载布局。

尝试layout.invalidate();