Android изменяет tableLayout из кода не работает

У меня странная проблема с заменой строки таблицы из кода.

Мой XML-код выглядит так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
>

<TableLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/columnheadings"
 android:layout_height="wrap_content" 
 android:layout_width="fill_parent"/>        

<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:dividerHeight="2px"
    />
    ...     
</LinearLayout>

Когда действие создано, я могу успешно вставить TableRow в "заголовки столбцов" TableLayout:

 table = (TableLayout)findViewById(R.id.columnheadings);
 table.removeAllViews();
 TableRow tr = new TableRow(this);
 TextView tv = new TextView(activity);
 tv.setText("asdf");
 tr.addView(tv);
 table.addView(tr);
 table.postInvalidate();

Содержимое (и ширина) столбцов таблицы рассчитываются динамически.

Теперь я хочу также перерисовать TableLayout, когда есть обновления в адаптере ListView. Для этого я создаю адаптер со ссылкой на активность.

Внутри адаптера я могу успешно изменить, например, текст столбца.

Что я пытаюсь сделать (без успеха):

 TableLayout tableLayout = (TableLayout)activity.findViewById(android.app.R.id.columnheadings);         

 tableLayout.removeAllViews();
 TableRow row=new TableRow(activity);
 TextView tv = new TextView(activity);
 tv.setText("test");

 row.addView(tv);
 tableLayout.addView(row);

 tableLayout.postInvalidate();

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

Какие-либо предложения?

1 ответ

Я не помню почему, но мой код row.getParent().requestLayout(); в конце всех манипуляций. Похоже, без меня это тоже не сработало. Мне не нужно TableLayout ссылка в моем коде, поэтому я использовал row.getParent()Я думаю, вы можете просто написать tableLayout.requestLayout(); и это поможет.

Другие вопросы по тегам