2016-07-22 21 views
1

TextViewを動的に追加する際に問題があります。最初にgetRoomList()という方法でリストから雇用された部屋を追加したいのですが、その後にexistingRoomNamesという配列の ":Free"という文字列の部屋を追加しますが、雇われません。複数のTextViewをLinearLayoutに動的に追加する

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="313dp" 
    android:layout_height="150dp" 
    android:id="@+id/linear1" 
    android:layout_gravity="center"></LinearLayout> 

親のLinearLayout内にある:

public void checkRoomsAndDate() { 
    linearLayout = (LinearLayout) findViewById(R.id.linear1); 
    linearLayout.removeAllViews(); 
    for (Room room : mCalendarModel.mList.getRoomList()) { 
     addHiredRoomToLayout(room); 
    } 
    addNotHiredRoomsToLayout(); 
} 

public void addHiredRoomToLayout(Room room) { 
    textView = new TextView(this); 
    textView.setText(room.getParameters()); 
    linearLayout.addView(textView); 
} 

public void addNotHiredRoomsToLayout() { 
    textView2 = new TextView(this); 
    for (String name : Constants.existingRoomNames) { 
     boolean contains = false; 
     for (Room room : mCalendarModel.mList.getRoomList()) { 
      if (room.getName().equals(name)) { 
       contains = true; 
      } 
     } 
     if (!contains) { 
      textView2.setText(name + ": Free"); 
      linearLayout.addView(textView2); 
     } 
    } 
} 

ここではXMLです。

私はこのような例外を取得:最後の行に

`java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.` 

linearLayout.addView(textView2); 

がある問題は何ですか?

public void addHiredRoomToLayout(Room room) { 
    textView = new TextView(this); 
    textView.setText(room.getParameters()); 
    linearLayout.addView(textView); 
} 

答えて

2

内部

+0

あなたの問題を解決した場合は、回答に同意してください。 –

+0

解決済み、ありがとうございました! –

1

移動

linearLayout = (LinearLayout) findViewById(R.id.linear1); 
linearLayout.removeAllViews(); 

あなたは再びレイアウトに同じビューを追加しています。問題は、あなたが同じのTextViewを毎回使用することである

public void addNotHiredRoomsToLayout() { 

for (String name : Constants.existingRoomNames) { 
    textView2 = new TextView(this); 
    boolean contains = false; 
    for (Room room : mCalendarModel.mList.getRoomList()) { 
     if (room.getName().equals(name)) { 
      contains = true; 
     } 
    } 
    if (!contains) { 
     textView2.setText(name + ": Free"); 
     linearLayout.addView(textView2); 
    } 
} 
} 
1

にあなたの関数を変更し 。 複数TextViewsを使用したい場合は、

for (String name : Constants.existingRoomNames) { 
    textView2 = new TextView(this); //create a new TextView that wasn't added to layout yet 

    boolean contains = false; 
    for (Room room : mCalendarModel.mList.getRoomList()) { 
     if (room.getName().equals(name)) { 
      contains = true; 
     } 
    } 
    if (!contains) { 
     textView2.setText(name + ": Free"); 
     linearLayout.addView(textView2); 
    } 
} 
0

にあなたのループを変更するには、このお試しください - >「text_view」という名前の1つのXMLレイアウトファイルを作成します。

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"/> 

その後、この問題を解決するためのライン:

textView2 = (TextView) getLayoutInflater().inflate(R.layout.text_view, null); 
関連する問題