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();
и это поможет.