Android 谜团:文本在随机 TextView 中消失

Android Mystery: Text Disappearing in random TextView

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

如您所见,每个目录都由一个 ImageView 和一个 TextView 表示,后者包含目录的名称。如果你检查第三行,你会看到两个 TextView 的文本是空的......这是我的错误。如果我滚动或旋转我的 phone...

,则出现此类错误的 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>

下面是我的 Adapter 的代码,主要关注函数 getView:

   @Override
    public View getView(int position, View view, ViewGroup parent) {

        ViewHolder viewHolder = null;

        if (view == null) {
            LayoutInflater inflater = this.activity.getLayoutInflater();
            view = inflater.inflate(R.layout.fragment_directory_gridview, parent, false);

            viewHolder = new ViewHolder();
            viewHolder.relativeLayout = (RelativeLayout)view.findViewById(R.id.layout_global);
            viewHolder.textViewDirectory = (TextView) view.findViewById(R.id.directory_text);
            viewHolder.imageViewDirectory = (ImageView) view.findViewById(R.id.directory_image);


            view.setTag(R.id.viewHolder, viewHolder);
        }else{
            viewHolder = (ViewHolder) view.getTag(R.id.viewHolder);
        }

        viewHolder.relativeLayout.setLayoutParams(this.viewFragmentDirectory.layoutParams);
        viewHolder.imageViewDirectory.setTag(position);
        viewHolder.imageViewDirectory.setImageBitmap(null);
        viewHolder.position = position;

        ModelDirectoryAndMedia directoryAndImage =this.directoriesAndMedias.get(position);

        viewHolder.textViewDirectory.setText(directoryAndImage.directoryView);

        ImageView imageView = viewHolder.imageViewDirectory;
        // creation/retrieve the thumbnail with a thread
        job = new Job(imageView, 
                directoryAndImage.media, Options.OPTIONS_THUMBNAIL, 
                position);
        this.bitmapCreate.addJobThumbnail(job);

        return view;
    }

我为找到错误所做的工作:

但是没有成功...错误仍然存​​在...

经过多次测试,我找到了错误的原因:是由于getView方法中的这行代码:

viewHolder.relativeLayout.setLayoutParams(this.viewFragmentDirectory.layoutPara‌​ms);

我使用这一行将空的 ImageView 显示为正确的大小。这样当缩略图准备好后,ImageView中的插入不会改变它的大小(我的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 属性。