Android神秘:文字随机TextView消失

时间:2015-01-30 14:21:29

标签: android gridview

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

screen shot

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

这是我对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>

这是我的适配器的代码,重点是函数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;
    }

我做了什么来发现错误:

  • 当我调用&#34; viewHolder.textViewDirectory.setText(s);&#34;
  • 时,我检查我的String是否为空
  • 我尝试使用hierarchyViewer进行检查,但如果TextView为空,我无法浏览元素...我不知道为什么......
  • 我删除了背景的透明度,删除了textView的背景属性,我设置了#34; ImageView.setImageBitmap(null);&#34;检查它是不是由于ImageView ......

但没有成功......虫子还在这里......

经过多次测试后,我发现了该错误的原因:这是由于getView方法中的这行代码所致:

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

我使用此行将空ImageView显示为正确的大小。因此,当缩略图准备就绪时,ImageView中的插入不会改变其大小(我的LayoutParams的设置是用缩略图的大小完成的)

有什么想法吗?对我的代码有任何意见吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

好的......这个错误是由于调用:

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属性。