java.lang.IllegalStateException: у указанного потомка уже есть родитель. Сначала вы должны вызвать removeView() для родителя дочернего элемента.

Я показываю 2 отдельные таблицы на экране. Нет проблем с отображением первой таблицы. Ссылаясь на TableLayout second_table , TableRow tableRow5 , Textfield(s) textView51 , textView52 , textView53

TextFields - это в основном столбцы. Три столбца должны отображать имя, фамилию, возраст. Мне нужно динамически устанавливать значения после получения их с сервера.

Я столкнулся со следующим исключением: java.lang.IllegalStateException: указанный дочерний объект уже имеет родителя. Вы должны сначала вызвать removeView() для родителя дочернего элемента.

Я заполняю вторую таблицу, используя следующие строки кода:

public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.employee_details);
 TableLayout tableLay = (TableLayout) findViewById(R.id.second_table);
 TableRow tableRow = (TableRow) findViewById(R.id.tableRow5);
 TextView fNameTxtView = (TextView) findViewById(R.id.textView51);
 TextView lNameTxtView = (TextView) findViewById(R.id.textView52);
 TextView ageTxtView = (TextView) findViewById(R.id.textView53);
 for(int count = 0; count < tempArrList.size() ; count++){
 fNameTxtView.setText(tempArrList.get(temp.get(0)));
 lNameTxtView.setText(tempArrList.get(temp.get(1)));
 ageTxtView.setText(tempArrList.get(temp.get(2)));
  tableRow.addView(fNameTxtView);
  tableRow.addView(lNameTxtView);
  tableRow.addView(ageTxtView);
  tableLay.addView(tableRow); // Add the new row to our tableLayout
 }
}

Я тоже пробовал несколько вариантов, но не смог решить проблему. Любые предложения приветствуются.

Макет XML выглядит следующим образом: employee_details.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <include android:id="@+id/header" layout="@layout/activity_header" />
    <RelativeLayout android:id="@+id/RelativeLayout1"
        android:background="@drawable/footerbg" android:layout_height="wrap_content"
        android:layout_width="fill_parent" android:layout_alignParentBottom="true"
        android:gravity="center">
        <Button android:layout_alignParentTop="true"
            android:layout_height="50dp" android:layout_width="150dp" android:id="@+id/btn_done"></Button>
    </RelativeLayout>
    <ScrollView android:id="@+id/scrollView01"
        android:layout_above="@id/RelativeLayout1" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_below="@+id/header">
        <LinearLayout android:id="@+id/linear"
            android:orientation="vertical" android:layout_gravity="center_horizontal"
            android:layout_width="match_parent" android:layout_height="match_parent">
            <TextView android:id="@+id/hello_TxtView"
                android:layout_width="wrap_content" android:layout_height="wrap_content">
            </TextView>
            <TableLayout android:id="@+id/first_table"
                android:layout_width="fill_parent" android:layout_height="wrap_content"
                android:background="@drawable/table_shape">
                <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    <TextView android:id="@+id/textView11"
                        android:layout_width="fill_parent" android:layout_height="match_parent">
                    </TextView>
                    <TextView android:id="@+id/textView12"
                        android:layout_width="fill_parent" android:layout_height="wrap_content">
                    </TextView>
                </TableRow>
            </TableLayout>
            <TableLayout android:id="@+id/second_table"
                android:layout_width="match_parent" android:layout_height="match_parent">
                <TableRow android:id="@+id/tableRow4" android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                    <TextView android:id="@+id/textView41"
                        android:layout_width="match_parent" android:layout_height="wrap_content">
                    </TextView>
                    <TextView android:id="@+id/textView42"
                        android:layout_width="fill_parent" android:layout_height="wrap_content">
                    </TextView>
                    <TextView android:id="@+id/textView43"
                        android:layout_width="fill_parent" android:layout_height="wrap_content">
                    </TextView>
                </TableRow>
                <TableRow android:id="@+id/tableRow5" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:background="#f6f7fc">
                    <TextView android:id="@+id/textView51"
                        android:layout_width="match_parent" android:layout_height="wrap_content">
                    </TextView>
                    <TextView android:id="@+id/textView52"
                        android:layout_width="match_parent" android:layout_height="wrap_content">
                    </TextView>
                    <TextView android:id="@+id/textView53"
                        android:layout_width="match_parent" android:layout_height="wrap_content">
                    </TextView>
                </TableRow>
            </TableLayout>
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

person chiranjib    schedule 04.01.2012    source источник


Ответы (1)


В своем заявлении for вы используете одни и те же объекты TextView и TableRow и каждый раз, когда вы это делаете:

tableRow.addView(fNameTxtView);
  tableRow.addView(lNameTxtView);
  tableRow.addView(ageTxtView);
  tableLay.addView(tableRow);

вы вставляете в свой макет те же TextViews fNameTxtView, lNameTxtView, ageTxtView. Чтобы избежать этого, вы можете динамически создавать объекты в своем операторе for следующим образом:

for(int count = 0; count < tempArrList.size() ; count++){
TextView fNameTxtView = new TextView(this);
 fNameTxtView.setText(tempArrList.get(temp.get(0)));
TextView lNameTxtView= new TextView(this);
 lNameTxtView.setText(tempArrList.get(temp.get(1)));
TextView ageTxtView = new TextView(this);
 ageTxtView.setText(tempArrList.get(temp.get(2)));
TableRow tableRow = new TableRow(this);
  tableRow.addView(fNameTxtView);
  tableRow.addView(lNameTxtView);
  tableRow.addView(ageTxtView);
  tableLay.addView(tableRow); // Add the new row to our tableLayout
 }

редактировать: конечно, вы можете добавить идентификаторы для TextViews, если хотите больше работать над ними.

person user    schedule 04.01.2012