Création de LinearLayout de manière programmatique / dynamique avec des vues multiples

j'ai une hiérarchie qui est comme ceci:

  • linéarisation (horizontale))
    • ImageView
    • linéarisation (verticale)
      • TextView
      • TextView
      • TextView
      • TextView

je veux pouvoir ajouter la hiérarchie ci-dessus par itération tant qu'il y a des données qui peuvent être obtenues à partir de la base de données(en utilisant Parse)

j'ai essayé de mettre en place L'ImageView et LinearLayout sous la LinearLayout parent 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ù j'ai fait erreur car mon code n'a pas provoqué d'erreur. S'il vous plaît aider.

EDIT: j'ai modifié les Orientations en conséquence et quand j'exécute l'application, elle s'arrête de fonctionner. Et provoque une erreur dans LogCat disant "l'enfant spécifié a déjà un parent. Vous doit d'abord appeler removeView() sur le parent de l'enfant.

Voici mon code 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>
25
demandé sur Ernest 2013-11-29 14:36:45
la source

3 ответов

vous voulez que cette hiérarchie soit programmée.

- LinearLayout(horizontal) - ImageView - LinearLayout(vertical) - TextView - TextView - TextView - TextView

Ok commençons par le 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é :)

46
répondu XtreemDeveloper 2018-09-14 19:02:01
la source

le problème est que les vues sont déjà ajoutées au layout dans le XML fichier. Ensuite, vous findViewById (rechercher) et essayer de les ajouter à la mise en page de nouveau. C'est pourquoi l'application s'écrase en se plaignant que, view a déjà un parent et vous ne pouvez pas l'ajouter à nouveau.

0
répondu Amulya Khare 2013-11-29 14:57:12
la source

dans le fichier XML LinearLayout a déjà une vue enfant. Il n'est donc pas nécessaire de les ajouter en code.

-1
répondu fightorqin 2014-10-01 07:55:27
la source