【问题标题】:Grid View Adapter problems网格视图适配器问题
【发布时间】:2016-12-11 13:36:59
【问题描述】:

我正在使用 GridView 适配器来显示图像(在 R.drawable 中)和图像下的文本描述(这两件事都在数组列表中的 strings.xml 文件中编码)。单击特定图像时,我想在新活动中显示图像和文本。

通过 SO,我发现由于图像大小,最好使用 int 而不是 bitmap 图像,但我遇到了适配器问题......

行:“holder.image.setImageResource(imgs.getResourceId(0, -1));”如下所示在 logcat 中给我一个错误。

有什么建议吗?

GridViewAdapter 代码:

    public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new ViewHolder();
        holder.imageTitle = (TextView) row.findViewById(R.id.text);
        holder.image = (ImageView) row.findViewById(R.id.image);

        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

    ImageItem item = data.get(position);
    holder.imageTitle.setText(item.getTitle());
    // problem code >>> holder.image.setImageResource(imgs.getResourceId(0, -1));
    return row;
}

static class ViewHolder {
    TextView imageTitle;
    ImageView image;
}

【问题讨论】:

  • 你遇到了什么错误?
  • Logcat 说“FATAL EXCEPTION: main java.lang.NullPointerException”,然后指向我所说的那行代码 (GridViewAdapter.getView) 会出现问题。应用在启动时崩溃。

标签: android gridview textview imageview


【解决方案1】:

您的 getView 方法应如下所示。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new ViewHolder(row);
        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

    ImageItem item = data.get(position);
    holder.imageTitle.setText(item.getTitle());
    holder.image.setImageResource(imgs.getResourceId(0, -1));
    return row;
}

您的视图持有者类应如下所示

static class ViewHolder {
    public TextView imageTitle;
    public ImageView image;

    public ViewHolder(View view) {
        image = (ImageView) view.findViewById(R.id.image);
        imageTitle = (TextView) view.findViewById(R.id.text);
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多