从GridViewAdapter获取图像时出错

时间:2014-08-12 00:29:31

标签: java android android-arrayadapter

我在尝试将图片放入gridview时收到两个错误

ImageItem item = data.get(position);

得到我的错误:

Error:(42, 34) error: incompatible types
required: ImageItem
found:    Object

 TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);

得到我的错误:

Error:(29, 60) error: cannot find symbol variable array

完整代码:

MainActivity.java

import java.util.ArrayList;
import android.app.Activity;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.GridView;


public class MainActivity extends Activity {
private GridView gridView;
private GridViewAdapter customGridAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gridView = (GridView) findViewById(R.id.gridView);
    customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
    gridView.setAdapter(customGridAdapter);
}

private ArrayList getData() {
    final ArrayList imageItems = new ArrayList();
    // retrieve String drawable array
    TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
    for (int i = 0; i < imgs.length(); i++) {
        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                imgs.getResourceId(i, -1));
        imageItems.add(new ImageItem(bitmap, "Image#" + i));
    }

    return imageItems;

}

}

GridViewAdapter.Java

 import java.util.ArrayList;
 import android.app.Activity;
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;

public class GridViewAdapter extends ArrayAdapter {
private Context context;
private int layoutResourceId;
private ArrayList data = new ArrayList();

public GridViewAdapter(Context context, int layoutResourceId,
                       ArrayList 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 = null;

    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());
    holder.image.setImageBitmap(item.getImage());
    return row;
}

static class ViewHolder {
    //TextView imageTitle;
    ImageView image;
}
}

ImageItem.java

import android.graphics.Bitmap;


public class ImageItem {
private Bitmap image;
private String title;

public ImageItem(Bitmap image, String title) {
    super();
    this.image = image;
    this.title = title;
}

public Bitmap getImage() {
    return image;
}

public void setImage(Bitmap image) {
    this.image = image;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}
}

2 个答案:

答案 0 :(得分:1)

我知道这篇文章是从不久前开始的,但是为了防止其他人遇到同样的问题,我这就解决了这个问题。

我有同样的问题。我花了一些时间来解决这个问题,但有两个地方你需要更新你应该解决这个问题的代码。

在GridViewAdapter.Java中进行以下更改

之前...

private ArrayList data = new ArrayList();

在...

private ArrayList<ImageItem> data = new ArrayList();

之前...

public GridViewAdapter(Context context, int layoutResourceId,
                   ArrayList data) {

在...

public GridViewAdapter(Context context, int layoutResourceId,
                   ArrayList<ImageItem> data) {

我希望这有帮助!

答案 1 :(得分:0)

您可以创建字符串数组,以便:

 <string-array name="image_ids">
    <item>@drawable/ads</item>
    <item>@drawable/dsa</item>
    <item>@drawable/sda</item>
 </string-array>