【问题标题】:Android GridView not showing imagesAndroid GridView 不显示图像
【发布时间】:2021-01-17 19:02:32
【问题描述】:

我用ImageAdapter 制作了一个GridView,但它没有显示里面的图像。 我尝试更改numColumnscolumnWidth 和其他属性,但没有成功。 在 Android Studio xml 设计面板中,我可以看到我的 Gridview。

这是我的gridview 在我的xml 布局文件中:

 <GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/linear_buttons"
    android:layout_above="@+id/btnSearch"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:background="@null"
    android:columnWidth="120dp"
    android:gravity="center"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth" />

这是我的适配器:

public class CustomGridViewAdapter extends BaseAdapter {
private final Context mContext;

public CustomGridViewAdapter(Context c) {
    mContext = c;
}

public int getCount() {
    return mThumbIds.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) { 
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width, R.dimen.grid_dimens_height));
        imageView.setScaleType(ImageView.ScaleType.CENTER);
        imageView.setPadding(1, 5, 1, 1);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

private final Integer[] mThumbIds = {
        R.drawable.grid_agapis, R.drawable.grid_asteies, R.drawable.grid_auto,
        R.drawable.grid_gamos, R.drawable.grid_goneis,
};

我使用以下代码设置适配器:

GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new CustomGridViewAdapter(this));
    gridview.setOnItemClickListener(this);

你能解释一下问题出在哪里吗? 谢谢。

【问题讨论】:

  • 能否在实例化适配器并使用它的地方添加代码?
  • 尝试用setBackgroundResource()替换setImageResource()
  • 现在gridview上有一个黑框

标签: java android gridview adapter


【解决方案1】:
imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width,
                                                    R.dimen.grid_dimens_height));

通过这行代码,您试图将抓取的可绘制对象的大小限制为分别等于grid_dimens_widthgrid_dimens_height 的固定宽度和高度。

但实际上使用R.dimen.foo 不会返回foo 的值,而是返回资源本身生成的整数值,它可以是一个大数字(例如-21893103 或33238590)......这将让您在屏幕上什么也看不到,因为图像是:

  • 太大(在资源值为 33238590 为正的情况下),因此您看到的像素很小
  • 或太小(在负资源值 -21893103 的情况下),因为它的大小为零。

您需要做的是使用getDimention() 获取dimen 资源并将资源ID 传递给它。

将其应用于您的代码:

替换:

imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width,
                                                    R.dimen.grid_dimens_height));

与:

imageView.setLayoutParams(new GridView.LayoutParams(
                  (int) mContext.getResources().getDimension(R.dimen.grid_dimens_width),
                  (int) mContext.getResources().getDimension(R.dimen.grid_dimens_height)));

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多