2010-07-16 13 views
2

J'ai eu un problème étrange avec le remplacement d'une ligne de table du code.Table à langer AndroidLayout du code ne fonctionne pas

Mon code XML ressemble à ceci:

<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> 

Lorsque l'activité est créée, je peux insérer avec succès un TableRow au TableLayout "ColumnHeadings":

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

Le contenu (et width) des colonnes de la table sont calculées dynamiquement.

Maintenant, je veux également redessiner le TableLayout, quand il y a des mises à jour dans l'adaptateur de ListView. Pour ce faire, je crée l'adaptateur avec une référence à l'activité.

De l'intérieur de l'adaptateur, je peux changer avec succès, par ex. le texte d'une colonne.

Ce que j'essaie de le faire (sans succès):

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

Malheureusement, la seule chose qui se produit est une suppression de la ligne du tableau en cours. La nouvelle ligne n'est pas ajoutée à la tableLayout de l'adaptateur.

Des suggestions?

Répondre

0

Je ne me souviens pas pourquoi, mais mon code a row.getParent().requestLayout(); à la fin de toutes les manipulations. On dirait que ça ne fonctionnait pas pour moi sans ça aussi. Je n'ai pas besoin de référence TableLayout dans mon code, c'est pourquoi j'ai utilisé row.getParent(), je pense que vous pouvez simplement écrire tableLayout.requestLayout(); et ça va aider.