2013-07-12 3 views
0

Я все для повторного использования просмотров в listview. Я всегда устанавливал видимость, содержимое, witdth и т. Д. все элементы управления снова в getView К сожалению, похоже, что ListView не может пересчитать высоту.Listview изменение размера (повторно) просмотров

Picture один показывает исходный пункт показал: enter image description here

Picture два показывает, как элемент один визуализируется после того, как мы прокручивается в сторону и обратно в нее enter image description here

Высота фон LinearLayout (черная область) сделал мне думаю, что на картинке два, Android повторно использует представление, которое просто показало намного более крупный элемент (например, второй элемент). Но почему он не перекалибрует/не перезаписывает/не перераспределяет себя (он находится в режиме «wrap_content» в своем XML) при повторном использовании в качестве представления для первого элемента, контент (текст + изображение) не такой, как heigh?

На самом деле я не уверен, что происходит. Проблема проявляется только в том случае, если у меня есть изображение в представлении. Я попытался упорядочить загрузку растрового изображения/изображения по-разному (пример кода под ним) с разными комментариями, но это, похоже, не имеет большого значения. Я действительно в затруднении здесь по причине.

override_listitem_news.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dip" 
android:background="@android:color/black"   
     >       
     <TextView 
       android:id="@+id/listitem_news_label" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textStyle="bold" 
       android:textSize="22sp" 
       android:padding="5dip" 
       android:text="@string/newsItemTitle"/>   
     <TextView 
       android:id="@+id/listitem_news_date" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textStyle="italic" 
       android:textSize="15sp" 
       android:padding="5dip" 
       android:text="@string/newsItemDate"/>     
     <TextView 
       android:id="@+id/listitem_news_content" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textStyle="normal" 
       android:textSize="15sp" 
       android:padding="5dip" 
       android:autoLink="web" 
       android:text="@string/newsItemDesc"      
android:background="@android:color/darker_gray"     
       />      
<ImageView 
     android:id="@+id/listitem_news_icon" 
     android:layout_width="match_parent"         
     android:layout_height="wrap_content"       
    />   
</LinearLayout> 

Вот код, где я загрузить изображение в GetView

     ViewTreeObserver vto = image.getViewTreeObserver(); 
         vto.addOnGlobalLayoutListener(
          new OnGlobalLayoutListener() { 
          @Override 
          public void onGlobalLayout() { 
           image.getViewTreeObserver().removeGlobalOnLayoutListener(this);                 
           image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
           SharedCode.sharedUtilScaleImage_Width(image);          
          } 
          }       
         );                 

         image.setTag(data.image_file_name + data.image_file_url); 
         Bitmap bit = null; 
         bit = SharedCode.sharedGetFileFromOffline(thisActivityContext, "news", data.image_file_name, MyGetKindOfFile.ImageAsBitmap).bitmap; 

         if (bit != null) {                  
          image.setImageBitmap(bit);                                      
          image.setVisibility(View.VISIBLE);         
         } 
         else { 
          image.setImageBitmap(null);         
          image.setVisibility(View.GONE); 
         } 
         image.setPadding(0, 0, 0, 0);                            
         image.setBackgroundColor(data.backgroundColorInt);         
+1

Опубликовать XML-макет для просмотра вашего элемента. – Karakuri

+0

@Karakuri Done :) – Tom

+1

Вы переопределяете 'getViewTypeCount()' и 'getItemViewType()' в своем адаптере? – CommonsWare

ответ

0

Для чего это стоит, проблема, как представляется, связано с ImageView. Только для справки, я напишу здесь, как я это решил.

  1. В GetView Я фиксированной ширины ImageView к ширине экрана (вместо того, чтобы «обернуть-контент» и/или ширину родительского вида - ранее код, используемый OnGlobalLayoutListener для родительской ширины)
  2. я перешел к использованию SetDrawable вместо SetImageBitmap. Это странно, но эта разница была очень актуальной при решении нечетного пространства вокруг изображения после прокрутки элемента/строки в/из вида.

Мое исследование также показало, что у других были проблемы с использованием wrap_content в listview для случаев, подобных моим, но я не смог найти никого, кто испытал бы те же проблемы, что и я.

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