Android не меняет tableLayout из кода - PullRequest
2 голосов
/ 16 июля 2010

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

Мой 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 «columnheads»:

 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 Ответ

0 голосов
/ 05 января 2011

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

...