以编程方式设置布局不会在GridView中显示项目

时间:2015-08-18 18:45:34

标签: android android-layout android-gridview

我是Android的初学者,我正在构建我的第一个应用。我在gridView中显示图像,其格式如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment">

<GridView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/fragment_main_gridView"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:numColumns="5"
    android:layout_alignParentTop="true"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5dp"
    android:clickable="true"/>

</RelativeLayout>

适配器中的getView方法(扩展ArrayAdapter)如下:

 @Override
public View getView(int position, View convertView,ViewGroup parent){
    ImageView imageView = (ImageView)convertView;

    if(convertView == null){
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.MATCH_PARENT)); //Always maintain aspect ratio of 1:1.5
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    }

    Picasso
            .with(mContext)
            .load(mImageUrls.get(position))
            .fit()
            .into(imageView);

    return imageView;
}

使用上述布局,网格上不会显示任何内容。

但是,如果不是将LayoutParams设置为MATCH_PARENT,我会做类似的事情 new GridView.LayoutParams(layout_width, layout_height)其中layout_width和layout_height预定义为某个值,显示图像。关于为什么会发生这种情况的任何想法都将受到赞赏!

1 个答案:

答案 0 :(得分:1)

我导入了您的代码,最初我将Picasso调用替换为延迟Runnable,只是为了查看布局是否存在任何问题。我可以看到测试图像就好了。

所以我添加了Picasso依赖项并使用相同的图像(android.R.drawable资源),我看到了一个空白页面。所以问题出现在Picasso电话中。我添加了以下几行:

.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)

Picasso设置,当然,我只看到了错误占位符。 看着logcat,我可以看到SkImageDecoder::Factory returned null到处都是。关于此的最常见主题之一是在没有扩展名的情况下请求图像。但似乎有很多原因,我没有那么多地使用毕加索,所以内心深处知道。