J'ai une hiérarchie qui ressemble à ceci:
Je veux pouvoir ajouter la hiérarchie ci-dessus par itération tant qu'il est possible d'obtenir des données de la base de données (à l'aide de Parse )
J'ai essayé de placer ImageView et LinearLayout sous le parent LinearLayout mais cela ne semble pas fonctionner. Voici mon code dans MainActivity.Java:
LinearLayout LL_Outer = (LinearLayout) findViewById(R.id.new_linearLayoutOuter);
LL_Outer.setOrientation(LinearLayout.VERTICAL); // set orientation
LL_Outer.setBackgroundColor(color.white); // set background
// set Layout_Width and Layout_Height
LinearLayout.LayoutParams layoutForOuter = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
LL_Outer.setLayoutParams(layoutForOuter);
LinearLayout LL_Inner = (LinearLayout) findViewById(R.id.new_linearLayoutInner);
LL_Inner.setOrientation(LinearLayout.HORIZONTAL);
LL_Inner.setBackgroundColor(color.white);
LinearLayout.LayoutParams layoutForInner = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
LL_Inner.setLayoutParams(layoutForInner);
//LL_Outer.addView(LL_Inner);
ImageView IV = (ImageView) findViewById(R.id.new_imageViewPP);
//IV.getLayoutParams().height = 55;
//IV.getLayoutParams().width = 55;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(14, 12, 0, 0);
params.height = 55;
params.weight = 55;
IV.setBackgroundColor(color.black);
IV.setLayoutParams(params);
LL_Inner.addView(IV);
LL_Outer.addView(LL_Inner);
Je ne sais pas où je me suis trompé, mon code ne générant aucune erreur. S'il vous plaît aider.
EDIT: J'ai modifié les orientations en conséquence et lorsque je lance l'application, elle ne fonctionne plus. Et provoque une erreur dans LogCat en disant "L'enfant spécifié a déjà un parent. Vous devez d'abord appeler removeView () sur le parent de l'enfant.
Voici mon XML:
<LinearLayout
Android:id="@+id/new_linearLayoutOuter"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@color/white"
Android:orientation="horizontal" >
<ImageView
Android:id="@+id/new_imageViewPP"
Android:layout_width="55dp"
Android:layout_height="55dp"
Android:layout_marginLeft="14dp"
Android:layout_marginTop="12dp"
Android:background="@color/black"
Android:contentDescription="@string/pp" />
<LinearLayout
Android:id="@+id/new_linearLayoutInner"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@color/white"
Android:orientation="vertical" >
<TextView
Android:id="@+id/new_textView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/movie_title"
Android:paddingTop="10dp"
Android:paddingLeft="7dp"
Android:textSize="15sp" /> <!-- Title of the movie -->
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/review_by"
Android:paddingTop="3dp"
Android:paddingLeft="7dp"
Android:textSize="12sp" /> <!-- By -->
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/movie_stars"
Android:paddingTop="3dp"
Android:paddingLeft="7dp"
Android:textSize="12sp" /> <!-- Rating and date -->
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/sample_string"
Android:maxLines="5"
Android:scrollbars="vertical"
Android:paddingTop="10dp"
Android:paddingLeft="7dp"
Android:textSize="12sp"
Android:layout_gravity="center_vertical|right" /> <!-- Review content -->
</LinearLayout>
</LinearLayout>
Vous voulez cette hiérarchie par programme.
- LinearLayout(horizontal)
- ImageView
- LinearLayout(vertical)
- TextView
- TextView
- TextView
- TextView
Ok, commençons par Parent LinearLayout
LinearLayout parent = new LinearLayout(context);
parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
parent.setOrientation(LinearLayout.HORIZONTAL);
//children of parent linearlayout
ImageView iv = new ImageView(context);
LinearLayout layout2 = new LinearLayout(context);
layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);
parent.addView(iv);
parent.addView(layout2);
//children of layout2 LinearLayout
TextView tv1 = new TextView(context);
TextView tv2 = new TextView(context);
TextView tv3 = new TextView(context);
TextView tv4 = new TextView(context);
layout2.addView(tv1);
layout2.addView(tv2);
layout2.addView(tv3);
layout2.addView(tv4);
Et vous avez terminé :)
Dans le fichier XML, LinearLayout a déjà une vue enfant. Il n'est donc pas nécessaire de les ajouter dans le code.
je vous suggère de supprimer le fichier XML et d'utiliser simplement le code complet du côté Java. vous pouvez ajouter les vues par programmation à partir du côté Java. celui-ci de xtreemdeveloper mais je change quelques lignes pour la mise en page parent.
// remove this params set it up below
parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
// change the code above into
.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
addContentView(parent,layoutParams);
// end of my change
cela ressemblera à ceci dans le code complet =
LinearLayout parent = new LinearLayout(context);
// remove this params set it up below
parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
// change the code above into
.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
addContentView(parent,layoutParams);
// end of my change
parent.setOrientation(LinearLayout.HORIZONTAL);
//children of parent linearlayout
ImageView iv = new ImageView(context);
LinearLayout layout2 = new LinearLayout(context);
layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);
parent.addView(iv);
parent.addView(layout2);
//children of layout2 LinearLayout
TextView tv1 = new TextView(context);
TextView tv2 = new TextView(context);
TextView tv3 = new TextView(context);
TextView tv4 = new TextView(context);
layout2.addView(tv1);
layout2.addView(tv2);
layout2.addView(tv3);
layout2.addView(tv4);
Le problème vient du fait que les vues sont déjà ajoutées à la présentation dans le fichier XML
. findViewById
(trouvez-les) et essayez de les ajouter à nouveau à la mise en page. C'est pourquoi l'application se bloque en se plaignant que, vue a déjà un parent et vous ne pouvez pas l'ajouter à nouveau.