The specified child already has a parent. You must call removeView() on the child's parent first.的解决办法

The specified child already has a parent. You must call removeView() on the child's parent first.的解决办法

    出现The specified child already has a parent. You must call removeView() on the child's parent first.这个问题,一般原因是对layout.xml的使用理解不清楚。
    以xml文件方式来设计界面的布局,如果需要动态的对xml文件中的各类View进行修改的话,在代码中使用时,不能直接使用this.findViewById(R.id.***)来获取xml文件中的每个View,然后再将这些View加入到代码中的Layout中来进行显示。正确的做法应该是使用inflater。

    举例如下:
xml布局文件test.xml为:
 1 <? xml version="1.0" encoding="utf-8" ?>
 2 < LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
 3     android:orientation ="vertical"  android:layout_width ="fill_parent"
 4     android:layout_height ="fill_parent" >
 5
 6      < TextView  android:id ="@+id/tv1"  android:layout_gravity ="center_vertical"
 7         android:layout_width ="wrap_content"  android:layout_height ="wrap_content"
 8   />
 9
10      < TextView  android:id ="@+id/tv2"  android:layout_gravity ="center_vertical"
11         android:layout_width ="wrap_content"  android:layout_height ="wrap_content"
12           />
13
14      < TextView  android:id ="@+id/tv3"
15         android:layout_gravity ="center_vertical"  android:layout_width ="wrap_content"
16         android:layout_height ="wrap_content"    />
17
18      < ImageView  android:src ="@drawable/line"  android:layout_width ="fill_parent"
19         android:layout_height ="fill_parent"    />
20
21 </ LinearLayout >


如果你需要使用这个布局XML文件,并根据自己的需要,将其中三个TextView的文字做更改,则在代码中应该这样去使用:
 1      
 2      LayoutInflater inflate  =  (LayoutInflater)
 3          getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 4          LinearLayout layout  =  (LinearLayout)inflate.inflate(R.layout.poemshowlist,  null ); 
 5          
 6          ((TextView)layout.findViewById(R.id.tv1)).setText(text1);
 7          ((TextView)layout.findViewById(R.id.tv2)).setText(text2);
 8          ((TextView)layout.findViewById(R.id.tv3)).setText(text3);
 9          
10          LinearLayout ll =   new  LinearLayout( this );
11          ll.addView(layout);
12          setContentView(ll);
13          
14          
15





你可能感兴趣的:(The specified child already has a parent. You must call removeView() on the child's parent first.的解决办法)