8

Próbuję dodać dynamicznie utworzone kilka RelativeLayouts do LinearLayout, który jest wewnątrz RelativeLayout, który jest wewnątrz ScrollView. Gdy całkowita wysokość wszystkich widoków przekracza rozmiar ekranu telefonu, wszystkie widoki są wyświetlane poprawnie. Ale gdy całkowity rozmiar dynamicznie dodawanych widoków nie wystarcza do wypełnienia ekranu, wyświetlany jest tylko pierwszy element RelativeLayout, a pozostałe nie są wyświetlane na ekranie. Jestem naprawdę beznadziejna i nie rozumiem, dlaczego.Dynamiczne dodawanie widoków do RelativeLayout wewnątrz ScrollView

Oto kod dynamicznie zapełnić widoki wewnątrz układu liniowego:

LinearLayout commentsLayout = (LinearLayout) findViewById(R.id.comments_layout); 

LayoutInflater inflater = (LayoutInflater) 
    this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

for(Comment c: commentsList) { 

    RelativeLayout layoutItem = (RelativeLayout) inflater.inflate(
     R.layout.list_item_comment, null, false); 

     TextView tv = (TextView) layoutItem.findViewById(R.id.textView); 
     ImageView iv = (ImageView) layoutItem.findViewById(R.id.imageView); 

     // set tv's text 
     // set iv's image and onclicklistener, nothing fancy here, everything goes well 

     commentsLayout.addView(layoutItem); 
} 

Oto list_item_comment.xml:

<RelativeLayout 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@color/white" 
> 
    <ImageView 
    android:id="@+id/imageView" 
    android:layout_width="50dip" 
    android:layout_height="50dip" 
    android:layout_alignParentLeft="true" 
    android:layout_marginTop="10dp" 
    android:layout_marginLeft="10dp" 
    /> 

    <TextView 
    android:id="@+id/textView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="10dp" 
    android:textSize="16sp" 
    android:layout_toRightOf="@id/imageView" 
    /> 
</RelativeLayout> 

I tu jest plik xml dla tej działalności:

<RelativeLayout 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:id="@+id/main_layout" 
> 
... 

    <ScrollView 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" 
    android:id="@+id/scrollView" 
    > 

     <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/relativeContainer" 
     > 

     ... 

      <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/comments_layout" 
      /> 

     </RelativeLayout> 

    </ScrollView> 

</RelativeLayout> 

Zrzuty ekranu:

Bez odpowiednich układów: (nieprawidłowa, musi pokazać 3 komentarzy)

Incorrect one

z dość układów: (prawidłowa, ekran jest wypełniony)

correct one

I wystarczy pokazać wszystkie trzy komentarze w pierwszym przypadku:/Z góry dziękuję.

+0

Dlaczego nie używać ListView z nagłówkiem i stopką? –

+0

Tak naprawdę normalnie mam wiele innych widoków nad tymi, które wyglądają jak lista: kilka widoków obrazu, przycisków itp., Więc nie jest to częsty przypadek, ale muszę też rozwiązać tę sytuację, ponieważ nie mogę polegać na tym, że każdy inny widok w tym działaniu zostanie zainicjowany. jakieś pomysły? – ecem

Odpowiedz

0

zamiast fill_parent, spróbuj zmienić layout_height z <RelativeLayout> twojego list_item_comment.xml do wrap_content.

Ponadto, dlaczego potrzebujesz innego <RelativeLayout> w swoim <ScrollView> xml swojej aktywności. Numer LinearLayout wystarczy, aby wyglądał tak, jak chcesz. Może po prostu to usuniesz.

+0

Próbowałem Twojej sugestii, ale nie wydaje się, aby rozwiązać problem:/Właściwie nie jest to typowy przypadek mojej działalności, zwykle musi być jeden 2 obrazami, jednym przyciskiem, kilkoma tekstowymi odsłonami itp. Dlatego relatywizacja ułatwia moją pracę. Ale to również sprawa (choć jest to rzadkość), dlatego powinienem znaleźć rozwiązanie:/ – ecem

+0

@ecem, Czy byłeś w stanie znaleźć rozwiązanie tego problemu? – WindsurferOak