Ajout de lignes de la Table de façon dynamique dans Android
Je suis en train de créer une mise en page où j'ai besoin d'ajouter des lignes de la table de façon dynamique. Ci-dessous le tableau de mise en page xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/displayLinear"
android:background="@color/background_df"
android:orientation="vertical" >
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/display_row"
android:layout_marginTop="280dip" >
</TableLayout>
Le fichier d'activité où les lignes sont ajoutées dynamiquement est
public void init(){
menuDB = new MenuDBAdapter(this);
ll = (TableLayout) findViewById(R.id.displayLinear);
TableRow row=(TableRow)findViewById(R.id.display_row);
for (int i = 0; i <2; i++) {
checkBox = new CheckBox(this);
tv = new TextView(this);
addBtn = new ImageButton(this);
addBtn.setImageResource(R.drawable.add);
minusBtn = new ImageButton(this);
minusBtn.setImageResource(R.drawable.minus);
qty = new TextView(this);
checkBox.setText("hello");
qty.setText("10");
row.addView(checkBox);
row.addView(minusBtn);
row.addView(qty);
row.addView(addBtn);
ll.addView(row,i);
}
}
Mais lorsque je l'exécute, je suis d'erreur ci-dessous
08-13 16:27:46.437: E/AndroidRuntime(23568): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roms/com.example.roms.DisplayActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Je comprends que cela est dû à la commande ll.addView(row,i);
mais quand je supprimer ce son ajout de toutes choses en une seule ligne plutôt bronzé de la création d'une nouvelle ligne pour l'élément suivant. J'ai essayé de donner de l'indice de trop comme row.addView(addBtn,i)
mais encore ce n'est pas de peupler correctement. Veuillez informer. Merci.
- Ici ligne de la Table est déjà dans le fichier xml...Alors avant de vous ajouter par programmation, vous devez appeler ll.removeallViews() la méthode.
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas être en utilisant un élément définies dans le schéma XML afin de créer plus d'exemples de cela. Vous devez créer dans un XML distinct et de gonfler ou de créer la TableRow programmaticaly. Si la création de leur programmaticaly, devrait être quelque chose comme ceci:
Créer une fonction init() et le point de la disposition de table.
Ensuite, créez les rangées et les colonnes.
Appel de la fonction init dans votre méthode onCreate:
Fichier de mise en page comme:
Ressemblera:
Vous pouvez également, comme Fredigato dit, déclarer un RelativeLayout dans un autre fichier de Mise en page. Ensuite instancier à l'aide de:
Dans cette approche, vous pouvez facilement concevoir une ligne personnalisée à l'aide de XML et de le réutiliser.
Maintenant, pour être en mesure de changer les points de vue des enfants dans le instancié RelativeLayout. Vous pouvez appeler ligne.childAt(index).
Donc, disons que vous avez un TextView dans le RelativeLayout, vous pouvez utiliser:
modifier le code d'init comme suit,
Votre Classe