Listview改变(重用)视图的大小

时间:2013-07-12 18:37:47

标签: android listview listitem

我在listview中重用视图。我总是在 getView 中再次设置所有控件的可见性,内容,等等。不幸的是,似乎ListView无法重新计算高度。

图一显示初始项目显示: enter image description here

图2显示了在我们滚动并返回之后如何呈现第一项 enter image description here

背景色情布局高度(黑色区域)让我认为在图片二中,Android正在重用一个只显示更高项目的视图(例如第二项)。但是,为什么当重新使用内容(文本+图像)不高的第一个项目的视图时,它为什么不重新校准/重置/重新计算自身(在XML中处于“wrap_content”模式)?

事实上,我不确定发生了什么。如果我在视图中有图像,问题只会出现。我已经尝试以不同的方式组织位图/图像加载(下面的示例代码)注释掉了不同的东西,但这似乎并没有太大的区别。我在这里真的很茫然。

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 个答案:

答案 0 :(得分:0)

对于它的价值,问题似乎与imageview有关。仅供参考,我将在此处写下我是如何解决它的。

  1. getView 中,我将imageview宽度修改为屏幕宽度(而不是“wrap-content”和/或父视图宽度 - 使用OnGlobalLayoutListener作为父宽度的早期代码)
  2. 我切换到使用SetDrawable而不是SetImageBitmap。这很奇怪,但是在滚动视图中的一个项目/行之后,这个差异在解决imageview周围的奇数空间时非常重要。
  3. 我的研究也表明其他人在列表视图中使用wrap_content时出现与我类似的问题,但我找不到任何遇到与我完全相同问题的人。