Присвоение данных приложению TableLayout Pragmatics Crashes при запуске - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть макет таблицы в XML со строкой и тремя текстовыми представлениями. Динамический анализ данных в таблице из массива, но при запуске приложения происходит сбой. вот мой код

TableLayout historyEntries = (TableLayout)findViewById(R.id.DataTable);
        historyEntries.setStretchAllColumns(true);
        historyEntries.bringToFront();
        for(int i = 0; i < dataArray.length; i++){
            TableRow tr =  (TableRow) findViewById(R.id.datarow);
            TextView c1 = (TextView) findViewById(R.id.TextView1);
            TextView c2 = (TextView) findViewById(R.id.TextView2);
            TextView c3 = (TextView) findViewById(R.id.TextView3);
            c1.setText(dataArray[i]);
            c2.setText(String.valueOf(dataArray[i]));
            c3.setText(String.valueOf(dataArray[i]));
            tr.addView(c1);
            tr.addView(c2);
            tr.addView(c3);
            historyEntries.addView(tr);
        }

Error

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

1 Ответ

0 голосов
/ 08 ноября 2018

Представление может иметь одного-единственного родителя. Вероятно, что у одного или всех ваших представлений есть родитель, судя по вызову findViewById. Если ваши взгляды уже завышены в активности, просто отбросьте эти строки:

tr.addView(c1);
tr.addView(c2);
tr.addView(c3);
historyEntries.addView(tr);

В противном случае вы можете создать отдельный файл макета с TableRow и TextView, если вы собираетесь добавить больше строк:

for (int i = 0; i < dataArray.length; i++){
    View v = LayoutInflater.from(context).inflate(R.layout.your_table_row, historyEntries, false);
    TableRow tr =  (TableRow) v.findViewById(R.id.datarow);
    TextView c1 = (TextView) v.findViewById(R.id.TextView1);
    TextView c2 = (TextView) v.findViewById(R.id.TextView2);
    TextView c3 = (TextView) v.findViewById(R.id.TextView3);
    c1.setText(dataArray[i]);
    c2.setText(String.valueOf(dataArray[i]));
    c3.setText(String.valueOf(dataArray[i]));
    historyEntries.addView(tr);
}
...