Как удалить строку таблицы в макете таблицы в Android - PullRequest
11 голосов
/ 05 апреля 2011
void init()
{
   intcolumnwidth1 = int_scr_wd*55;
   intcolumnwidth1 = intcolumnwidth1/100;
   for (int i = 0; i < strarr.length-1; i++)
   {
      strinarr = fun1.split(strarr[i].trim(),"^");
      tr1 = (TableRow) new TableRow(this);
      txt1=new TextView(this);
      txt1.setWidth(intcolumnwidth1);
      txt1.setText(strinarr[0]);
      tr1.addView(txt1);
      tl.addView(tr1,new TableLayout.LayoutParams(layoutParams));
   }
}

Сценарий - это когда первый раз, когда я открываю эту страницу, он динамически добавляет строки в макет таблицы ... но если через какое-то время данные в базе данных изменяются ... когда я нажимаю кнопку обновления, он добавляет новыйданные после старых данных в макете таблицы ... все, что мне нужно, это решение о том, как обновить или удалить текстовое представление, которое уже существует в макете таблицы ...

thanx ..

Ответы [ 8 ]

16 голосов
/ 05 апреля 2011

Попробуйте removeView

row = (TableRow)findViewById(R.id.row);
table.removeView(row);
16 голосов
/ 12 мая 2014

Этот метод, который я написал, удаляет все строки, кроме первой. Это полезно, если вы не хотите удалять строку заголовка, например:

private void cleanTable(TableLayout table) {

    int childCount = table.getChildCount();

    // Remove all rows except the first one
    if (childCount > 1) {
        table.removeViews(1, childCount - 1);
    }
}
12 голосов
/ 16 июня 2011

Я понимаю, что это старая тема, но я так шокирован, когда наткнулся на это без приличного ответа.

Я делаю это так:

TableLayout table = (TableLayout) findViewById(R.id.myTable);       
table.removeAllViews();

Это удалит все дочерние представления, в данном случае строки и все. Из вашего описания не кажется, что вы хотите удалить только одну строку, но вы хотите удалить их, а затем снова загрузить строки. Приведенный выше код сделает удаление части.

6 голосов
/ 05 апреля 2011

Другие решения требуют, чтобы у ваших строк были уникальные идентификаторы.

Если у них нет уникальных идентификаторов, как насчет использования:

tl.removeView(rowIndex);

В любом случае, вы должны попробовать изучитькак использовать SimpleCursorAdapter или CursorAdapter , поскольку они специально предназначены для отображения содержимого запроса базы данных в списке.См. Связывание с данными с AdapterView .

2 голосов
/ 13 мая 2016

Я использую это:

tl.removeView(tl.getChildAt(index));
2 голосов
/ 05 апреля 2011

Вам необходимо знать текстовое представление для удаления. TextView можно идентифицировать, задав уникальный идентификатор с помощью setId () или используя уникальный тег с помощью setTag ().

Затем его можно определить с помощью TextView tv = (TextView) tr1.findViewByTag ( уникальный тег );

Используйте removeView, чтобы удалить View.

1 голос
/ 05 сентября 2012

посмотрите этот код, чтобы удалить строку в таблице

private List<View> listViewRow;

if (listViewRow.size() > 0) {
    for (View view : listViewRow) {
        table.removeView(view);
    }
}

for (int i = 0; i < myList.size(); i++) {
    row.addView((new TextView(context).setText("Teste")), 0);
    row.addView((new TextView(context).setText("Teste")), 1);
    row.addView((new TextView(context).setText("Teste")), 2);

    listViewRow.add(row);
    table.addView(row, 1);
}
0 голосов
/ 14 февраля 2013

Используйте это:

new Handler().postDelayed(new Runnable() {
      public void run() {
         TableRow row = (TableRow)table.getChildAt(i);
         table.removeView(row);
      }
 }, 100);

Где i - позиция строки, которую вы хотите удалить.

...