Android之谜:随机文本视图中的文本消失

Android之谜:随机文本视图中的文本消失,android,gridview,Android,Gridview,我的申请有问题。在这个应用程序中,我有一个片段,在gridView中显示用户的媒体目录。以下是一个屏幕截图: 如您所见,每个目录都由一个ImageView和一个TextView表示,后者包含目录的名称。如果你检查第三行,你会看到两个文本视图的文本是空的…这是我的错误。如果我滚动或旋转手机,gridview中出现此类错误的元素会有所不同 以下是我对gridView元素的布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayo

我的申请有问题。在这个应用程序中,我有一个片段,在gridView中显示用户的媒体目录。以下是一个屏幕截图:

如您所见,每个目录都由一个ImageView和一个TextView表示,后者包含目录的名称。如果你检查第三行,你会看到两个文本视图的文本是空的…这是我的错误。如果我滚动或旋转手机,gridview中出现此类错误的元素会有所不同

以下是我对gridView元素的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_global"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="1dp" >

<ImageView
    android:id="@+id/directory_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/content_description_album_imageview" />

<TextView
    android:id="@+id/directory_text"
    style="@style/Act_MyOwnLife_TextView_large"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@id/directory_image"
    android:background="@color/black_transparent"
    android:gravity="right"
    android:paddingRight="4dp"
    android:singleLine="true" 
     />

    </RelativeLayout>
我是如何找到bug的:

我在调用viewHolder.textViewDirectory.setTexts时检查字符串是否为空; 我尝试使用hierarchyViewer进行检查,但如果TextView为空,我无法浏览元素…我不知道为什么。。。 我移除背景的透明度,移除textView的background属性,我设置ImageView.setImageBitmapnull;要检查它是否不是由ImageView引起的。。。 但是没有成功…虫子还在这里

经过更多的测试,我发现了错误的原因:这是由于getView方法中的这行代码造成的:

viewHolder.relativeLayout.setLayoutParams(this.viewFragmentDirectory.layoutPara‌​ms);
我使用此行将空的ImageView显示为正确的大小。这样,当缩略图准备就绪时,在ImageView中的插入不会更改其大小。my LayoutParams的设置是使用缩略图的大小完成的

有什么想法吗?对我的代码有什么评论吗


非常感谢

好的……错误是由于调用了:

viewHolder.relativeLayout.setLayoutParams(this.viewFragmentDirectory.layoutParams);
但我不明白为什么…无论如何,我这样做是为了确保ImageView具有正确的初始大小来显示由线程加载的缩略图

因此,我找到了另一种解决方案来设置ImageView的最小大小,即使它们是空的:

viewHolder.imageView.setMinimumHeight(this.viewControlerAlbum.sizeThumbnail);
viewHolder.imageView.setMinimumWidth(this.viewControlerAlbum.sizeThumbnail);
我的layout.xml文件有点更新:

<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/content_description_album_imageview"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"/>

我添加了adjustViewBounds属性。

Ok….该错误是由于getView方法中的这行代码引起的:viewHolder.relativeLayout.SetLayoutParamstThis.viewFragmentDirectory.layoutParams;但是为什么呢?事实上,我的问题是缩略图是由线程加载的,因此每个gridView元素的宽度和高度都未知,因此gridView的最终大小也未知……这就是为什么我使用这一行viewHolder.relativeLayout.SetLayoutParamstThis.viewFragmentDirectory.layoutParams;向gridview指示每个元素的大小。如果我不使用此解决方案,我会有一个奇怪的错误:我的gridView的最后一行在第一时间不可见…但是如果我使用我的解决方案,一些textView不会出现…有帮助吗?事实上,异步加载缩略图并不是设置布局参数的原因。尝试简化您的用例以找到问题的根源。如果我是你,我会先用静态图像替换所有图像,使所有文本都是相同的hello world,并删除布局参数设置。谢谢你的回答。我试图在之前的评论中解释为什么我必须做集合布局。如果我删除它,所有文本视图都会正确显示。我测试过了。但是由于线程的使用,我将得到另一个bug。未显示textView的问题正是由于使用参数将宽度和高度固定为特定值来执行set layout调用…我使用特定值是因为我知道缩略图的大小-因此每个imageView首先以正确的大小和灰色背景显示,我想你真正的问题是线程的问题。您应该异步加载图像,在加载之前使用占位符而不是真正的缩略图。关于如何做到这一点,有很多指南。如果我是你,我就会这么做。
<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/content_description_album_imageview"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"/>