Chimpanse
Chimpanse

Reputation: 350

Errors when getting images from GridViewAdapter

I am getting two errors when trying to get pictures to put in my gridview

ImageItem item = data.get(position);

get's me error:

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

And

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

get's me error:

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

full code:

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;
}
}

Upvotes: 0

Views: 517

Answers (2)

SoConfused
SoConfused

Reputation: 21

I know this post is from a while ago, but just in case someone else comes across this same issue that I had this is what I did to solve the problem.

I had the same exact issue. Took me a while to figure this out, but there is 2 places where you need to update your code that should solve this issue.

Within GridViewAdapter.Java make the following changes

Before...

private ArrayList data = new ArrayList();

After...

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

Before...

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

After...

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

I hope this helps!

Upvotes: 1

You can create string-array, so that:

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

Upvotes: 0

Related Questions