61 votes

Comment ajouter dynamiquement des lignes dans la mise en page d'un tableau ?

J'ai certaines données dans sqllite et elles sont mises à jour à chaque fois que je clique sur le bouton de sauvegarde et je veux afficher les données dans une table pour ajouter plus de lignes pour les données mises à jour.

J'ai un certain code mais il ne montre que les données mises à jour remplaçant les données précédentes et je veux ajouter plus de lignes au fur et à mesure que les données sont mises à jour.

Je sais qu'il ne s'agit que d'ajouter une ligne dans le tableau, mais comment ajouter d'autres lignes ?

TableLayout tl=(TableLayout)findViewById(R.id.maintable);    
TableRow tr1 = new TableRow(this);
tr1.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView textview = new TextView(this);
textview.setText(data);
//textview.getTextColors(R.color.)
textview.setTextColor(Color.YELLOW);
tr1.addView(textview);
tl.addView(tr1, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

99voto

Jarrod Smith Points 1392

Voici une technique que j'ai mise au point après quelques essais et erreurs et qui vous permet de conserver vos styles XML et d'éviter les problèmes liés à l'utilisation d'une balise <merge/> (c'est-à-dire que inflate() nécessite une fusion pour s'attacher à Root, et renvoie le noeud Root). Pas de temps d'exécution new TableRow() ou new TextView() nécessaires.

Code

Note : Ici CheckBalanceActivity est un échantillon Activity classe

TableLayout table = (TableLayout)CheckBalanceActivity.this.findViewById(R.id.attrib_table);
for(ResourceBalance b : xmlDoc.balance_info)
{
    // Inflate your row "template" and fill out the fields.
    TableRow row = (TableRow)LayoutInflater.from(CheckBalanceActivity.this).inflate(R.layout.attrib_row, null);
    ((TextView)row.findViewById(R.id.attrib_name)).setText(b.NAME);
    ((TextView)row.findViewById(R.id.attrib_value)).setText(b.VALUE);
    table.addView(row);
}
table.requestLayout();     // Not sure if this is needed.

attrib_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow style="@style/PlanAttribute"  xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        style="@style/PlanAttributeText"
        android:id="@+id/attrib_name"
        android:textStyle="bold"/>
    <TextView
        style="@style/PlanAttributeText"
        android:id="@+id/attrib_value"
        android:gravity="right"
        android:textStyle="normal"/>
</TableRow>

27voto

Atmaram Points 991

De la même manière que vous avez ajouté une ligne dans le tableau, vous pouvez ajouter plusieurs lignes. TableRow dans votre tableLayout objet

tl.addView(row1);
tl.addView(row2);

etc...

3voto

Matthew Willis Points 26453

Vous feriez mieux d'utiliser un ListView avec un Adaptateur de curseur (ou SimpleCursorAdapter ).

Ils sont conçus pour afficher les lignes d'une base de données sqlite et permettent de les rafraîchir avec un minimum de programmation de votre part.

Modifier - voici un tutoriel impliquant SimpleCursorAdapter et ListView, y compris des exemples de code.

2voto

Romain Guy Points 57114

Vous faites bien les choses : à chaque fois que vous devez ajouter une ligne, il suffit d'ajouter une nouvelle ligne. TableRow() etc. Il pourrait être plus facile pour vous de inflate la nouvelle ligne de XML cependant.

0voto

Hong Ning Points 570

Solution 1. Définissez votre TableLayout tl comme variable membre de la classe, appelez seulement TableLayout tl=(TableLayout)findViewById(R.id.maintable); lorsque vous initiez la classe. Lorsque le bouton est cliqué, utilisez directement tl, par exemple tl.addView(row), n'appelez plus FindViewById. Ainsi, la nouvelle ligne suivante ne remplacera pas la précédente.

Solution 2. Chaque fois que vous cliquez sur un bouton, sauvegardez vos données mises à jour dans un tableau, puis redonnez vie à l'ensemble de votre tableau en parcourant le tableau en boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X