как удалить строку таблицы в макете таблицы в android

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));
   }
}

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

thanx..

8 ответов


попробовать removeView

row = (TableRow)findViewById(R.id.row);
table.removeView(row);

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

private void cleanTable(TableLayout table) {

    int childCount = table.getChildCount();

    // Remove all rows except the first one
    if (childCount > 1) {
        table.removeViews(1, childCount - 1);
    }
}

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

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

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

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


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

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

tl.removeView(rowIndex);

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


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

затем он может быть идентифицирован TextView tv = (TextView) tr1.findViewByTag (уникальный тег);

используйте removeView для удаления представления.


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

tl.removeView(tl.getChildAt(index));

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

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);
}

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

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

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