我的申请Life Gallery中存在问题。在这个应用程序中,我有一个片段,在gridView中显示用户的媒体目录。这是一个截图:
如您所见,每个目录都用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;
}
我做了什么来发现错误:
但没有成功......虫子还在这里......
经过多次测试后,我发现了该错误的原因:这是由于getView方法中的这行代码所致:
viewHolder.relativeLayout.setLayoutParams(this.viewFragmentDirectory.layoutParams);
我使用此行将空ImageView显示为正确的大小。因此,当缩略图准备就绪时,ImageView中的插入不会改变其大小(我的LayoutParams的设置是用缩略图的大小完成的)
有什么想法吗?对我的代码有任何意见吗?
非常感谢!
答案 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属性。