2013-11-29 4 views
22

я имею иерархию, которая, как это:Создание LinearLayout Программная/Динамически с несколькими представлениями

  • LinearLayout (горизонтальный)
    • ImageView
    • LinearLayout (вертикальный)
      • TextView
      • TextView
      • TextView
      • TextView

Я хочу, чтобы иметь возможность добавить иерархию выше через итерации, пока есть данные, которые могут быть получены из базы данных (с использованием Parse)

У меня есть попытался установить ImageView и LinearLayout под родительским LinearLayout, но он, похоже, не работает. Вот мой код в 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); 

Я не знаю, где я пошло не так, как мой код не подскажет какую-либо ошибки. Пожалуйста помоги.

EDIT: Я отредактировал Ориентации соответственно, и когда я запустил приложение, он перестает работать. И подсказывает об ошибке в LogCat говоря: «Указанный ребенок уже имеет родитель, Вам необходимо позвонить removeView() на родителе ребенка первого

Вот мой 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> 
+1

Во-первых, ориентация на внутренние и внешние раскладок поменялись местами. Кроме того, что вы подразумеваете под _ «, похоже, не работает». _ Вы ничего не видите или видите что-то, а не другие? –

+0

Я отредактировал соответствующие ориентации. Он не запускает приложение, он резко закрывается. В LogCat регистрируется следующая ошибка: «У указанного дочернего элемента уже есть родительский элемент. Сначала вы должны вызвать removeView() родителя ребенка». – Ernest

+0

Я думаю, что у вас уже есть «иерархия» в файле XML. И вы пытаетесь воссоздать его. Это проблема. Пожалуйста, разместите свой XML также. –

ответ

0

Проблема в том, что взгляды уже добавлен в макет в файле XML. Затем вы найдете findViewById (найдите их) и попробуйте добавить их в макет снова. Именно поэтому приложение вылетает с жалобами на то, что в представлении уже есть родительский элемент, и вы не можете добавить его снова.

-1

В XML-файле LinearLayout уже имеет дочерний вид. Поэтому нет необходимости добавлять их в код.

32

Вы хотите, чтобы эта иерархия была программно.

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

Ok позволяет начать с Материнской 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)); 
parent.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); 

И вы сделали :)

+0

Ваш код использует это исключение: 'java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Вы должны сначала вызвать removeView() родителя ребенка. –

+0

Как создать LayoutParams со значениями, такими как 'width: 0dp' и' height: 100dp' в отличие от 'match_parent' и' wrap_content' –

Смежные вопросы