Utilisation de la vue de gonfler plusieurs fois
J'ai un certain problème en ce qui concerne le gonflage et le ré-utiliser les mêmes TextView.
Sa comme sa tentative de remplacement de la même textview plus et plus de nouveau ou quelque chose et il ne peux pas faire cela?
LayoutInflater inflater = LayoutInflater.from(this);
View mainlayout = inflater.inflate(R.layout.days_monday_inflate, null);
View layout_number = inflater.inflate(R.layout.inflate_number, null);
for (int i = 0; i < 10; i++) {
row = new TableRow(this);
number = (TextView) layout_number.findViewById(R.id.Number);
number.setTag(i);
number.setText(Integer.toString(i));
row.addView(number);
}
setContentView(mainlayout);
Ici est la inflate_number.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Number"
android:layout_width="3dp"
android:layout_height="wrap_content"
android:layout_gravity="center|bottom"
android:text="1" />
C'est l'erreur im obtenir et de sa ligne: 51, qui est:
row.addView(number);
07-18 20:54:25.124: E/AndroidRuntime(1166): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.view.ViewGroup.addView(ViewGroup.java:1865)
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.view.ViewGroup.addView(ViewGroup.java:1822)
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.view.ViewGroup.addView(ViewGroup.java:1802)
07-18 20:54:25.124: E/AndroidRuntime(1166): at com.trainingschedule.days.Monday.onCreate(Monday.java:50)
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-18 20:54:25.124: E/AndroidRuntime(1166): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
OriginalL'auteur JussT | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes jamais réellement l'ajout de tout point de Vue à votre Activité. Vous êtes en train de créer de nouveaux TableRows et l'ajout de TextViews, mais vous n'êtes jamais à l'ajout de lignes pour rien. En supposant que vous avez un TableLayout dans
R.layout.days_monday_inflate
, vous devez d'abord obtenir une référence à ce point de vue (TableLayout layout = (TableLayout)mainLayout.findViewById(R.id.my_table_layout_id)
) puis ajouter chaque ligne pour que TableLayout:Bien que je vous recommande la configuration de votre mise en page entièrement en XML, si possible, à moins de façon dynamique. Aussi, si vous ne faites qu'ajouter un TextView par ligne, vous êtes mieux de simplement en utilisant un LinearLayout, je dirais.
Une chose à noter est que vous avez à passer que la valeur null lorsque vous gonflez, parce que si vous essayez de le joindre à un groupe vue il y inflate () retourne la vue de groupe et votre findViewById retournera toujours la première instance de l'id n'est pas une nouvelle.
En fait, je me rends compte maintenant passer la valeur null est la mauvaise approche. Vous devriez en fait passer le parent de mise en page, mais aussi passer dans
false
comme le dernier paramètre pour empêcher de le fixer à la disposition immédiatement (vous permettant d'obtenir une référence). J'ai mis à jour la réponse.OriginalL'auteur kcoppock
Dans mon cas, setTag(i) n'a pas fonctionné, ce qui a fonctionné a été de changer l'id après avoir gonflé la mise en page, mais avant de l'ajouter à la vue parent comme ceci:
OriginalL'auteur unify
Vous essayez d'ajouter un seul TextView à plusieurs lignes, ce qui est la cause de votre erreur. Vous aurez besoin de regonfler layout_number à chaque fois pour obtenir un nouveau TextView.
Je ne suis pas sûr de ce qui est contenu dans votre layout_number fichier, mais basé sur ce que vous avez ici, il semble que vous pourriez être mieux servi à créer de nouveaux TextViews à l'intérieur de votre boucle ala
number = new TextView(this);
Et l'erreur est sur la ligne de 50 ans, qui estnumber.setText(Integer.toString(i));
OriginalL'auteur Matt Jordan
Essayez ceci:
R.layout.days_monday_inflate
?Je me demandais à ce sujet, je croyais que vous aviez laissé de côté un peu de code. Vous devez ajouter votre TableRow des cas, à un TableLayout. par exemple, TableLayout tableLayout = new TableLayout(ce); ... tableLayout.addView(ligne); <- ajouter de la ligne de la table.
Dois-je le faire sur chaque boucle for cercle ou après ma boucle for? Parce que j'ai un TableLayout dans mon days_monday_inflate je veux utiliser
Si vous avez un TAbleLayout dans R. layout.days_monday, alors vous pouvez l'extraire de son gonflé vue. par exemple, TableLayout tableLayout = (TableLayout) mainLayout.findViewById(R. id.tableLayoutId); et vous avez juste besoin de faire cela à l'extérieur de la boucle. Mais l'ajout de la TableRow à la tablelayout doit être à l'intérieur de la boucle.
Je sais que mon problème maintenant, grâce azgolfer!
OriginalL'auteur azgolfer