2016-03-24 6 views
2

Ich habe einen benutzerdefinierten Listenansichtsadapter, der eine angepasste Listenelementansicht verwendet. Die Ansicht der benutzerdefinierten Listenelemente hat links eine Bildansicht mit einem Stapel von zwei TextViews, einem Haupttitel oben und einem Untertitel unten rechts. Was ich möchte passieren, ist der Untertitel verschwinden zu lassen und der Haupttext, um den Raum zu füllen, wenn es keinen Subtext zur Anzeige gibt.TextView in benutzerdefinierter ListView-Objektansicht füllt Eltern nicht in API 18 & 19

Ich habe dies gegen alle anderen Handy/Tablet-APIs zwischen 16 und 23 getestet. Alles funktioniert wie erwartet AUSSER wenn ich auf einem Gerät mit Android 4.3.1 (API 18) Android 4.4.2 (API 19 läuft). Bei der Verwendung von API 18 oder 19 wird die Sichtbarkeit der Untertitelansicht auf View.GONE gesetzt, aber die Haupttitelansicht wird nicht so skaliert, dass sie den Platz belegt.

Weiß jemand, was hier vor sich geht?

Hier ist die Layoutdatei für das Listenelement:

list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:padding="5dp"> 

    <ImageView 
     android:id="@+id/list_item_snapshot_imageview" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:background="@color/medium_grey" 
     android:contentDescription="@string/item_snapshot" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignBottom="@id/list_item_snapshot_imageview" 
     android:layout_alignTop="@id/list_item_snapshot_imageview" 
     android:layout_marginLeft="5dp" 
     android:layout_marginStart="5dp" 
     android:layout_toEndOf="@id/list_item_snapshot_imageview" 
     android:layout_toRightOf="@id/list_item_snapshot_imageview" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/list_item_title_textview" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textSize="20sp" 
      tools:text="Main Text" /> 

     <TextView 
      android:id="@+id/list_item_subtitle_textview" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textSize="14sp" 
      tools:text="Subtext" /> 
    </LinearLayout> 
</RelativeLayout> 

Hier ist der Java-Code, der für die Aktualisierung der Inhalte verantwortlich ist. viewHolder ist nur eine statische Klasse mit Verweisen auf die TextViews und wird in einem Tag auf dem Listenelement für die Ansichtsrecycling gehalten.

NamedItem item = getRowItem(section, position); 
if (item != null) { 
    viewHolder.titleTextView.setText(item.getName()); 

    if (item.getSubtitle() != null) { 
     String subtitle = ((ItemInfo) item).getSubtitle(); 
     viewHolder.subtitleTextView.setText(subtitle); 
     viewHolder.subtitleTextView.setVisibility(View.VISIBLE); 
    } else { 
     viewHolder.subtitleTextView.setVisibility(View.GONE); 
    } 
} 

EDIT Ich habe einige Tests und dies auch geschieht auf API 18 sowie 19. änderte ich den Rest der Beschreibung, dass zu reflektieren.

Antwort

2

Das herausgefunden. Sieht aus, als ob etwas über die Art und Weise, wie ListView-Objektansichten in API gehandhabt werden, RelativeLayout nicht als Root-Layout in einem benutzerdefinierten ListView-Objekt aufweist. Umwickeln des gesamten Layouts in einem Linearlayout das Problem behoben:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:padding="5dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <!-- Other Views ... --> 

    </RelativeLayout> 
</LinearLayout> 

versucht, diese nach Antwort auf diese kommenden SO: https://stackoverflow.com/a/21334982/1777839

Immer noch nicht nicht erklären, warum dies allerdings geschieht.