2016-06-12 4 views
0

私は、LinearLayoutコンテナ内に膨張したビューを追加しようとしています。しかし、私は子供がすでに親の問題を抱えています。 私のXMLファイルはコンテナを複数回持っています。 item_button.xml activity_main.xml膨張したビューを線形レイアウトに複数回追加するにはどうすればよいですか?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@android:color/black" 
     ></LinearLayout> 
</LinearLayout> 

私はコンテナに膨らまするXMLです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:background="@color/purple" 
    android:orientation="vertical"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="25sp" 
     android:text="Button 1" 
     android:padding="20dp" 
     android:background="@color/colorAccent" 
     /> 

</LinearLayout> 

次に、onCreateメソッド内のJavaコードを示します。私はコンテナにchildViewを複数回追加する:

 View childView; 
     LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     childView = inflater.inflate(R.layout.item_button, null); 
     container.addView(childView); 
     container.addView(childView); 

しかしビューに子mulitple回を追加すると、次のエラーを与える:

The specified child already has a parent. You must call removeView() 
on the child's parent first. 

答えて

2

あなたが同じビューの複数を追加しているので、これが起こりますあなたが達成したいものを達成するためには、ビューを一度だけ追加しなければならないため、レイアウトにビューを追加するたびに新しいビューを作成する必要があります。

のは、あなたがそれを2回追加したいとしましょう:あなたはビューに、より多くの回を追加したい場合は、

View childView1, childView2; 
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
childView1 = inflater.inflate(R.layout.item_button, null); 
childView2 = inflater.inflate(R.layout.item_button, null); 
container.addView(childView1); 
container.addView(childView2); 

をOR:

View v1, v2, v3; 
View[] childViews = new View[]{v1,v2,v3}; 
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
for(int v = 0; v < childViews.length; v++){ 
    childViews[v] = inflater.inflate(R.layout.item_button, null); 
    container.addView(childViews[v]); 
} 
+0

Thanks Muhammed。 – Joyson

+0

あなたはとても歓迎ですJoyson –

1

膨張したビューが既にに追加されたように親のレイアウトを追加する前に、毎回それを膨らませる必要があります。

View childView; 
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
for (int i = 0; i < count; i++) { 
    childView = inflater.inflate(R.layout.item_button, null); 
    container.addView(childView); 
} 

countは明らかにあなたがitem_buttonレイアウトを追加する回数がある:あなたのコードは次のようなものでなければなりません。

+0

ありがとうRehan。それは問題を解決しました。 – Joyson

関連する問題