使用setAdapter()作为适配器需要什么?

时间:2014-11-29 21:39:19

标签: android android-gridview android-adapter android-gridlayout android-adapterview

有问题的AdapterView是 GridView 。我想知道“setAdapter()方法究竟意味着什么,然后将自定义适配器(ImageAdapter)设置为要在网格中显示的所有项目的源。”在这android official guide中。它是 getView()方法吗?

我的目标是创建一个网格视图,从 SD卡导演 y获取输入,而不是资源文件夹。因此,我将使用绝对路径,而不是使用资源的ID。

我想设置类似的东西:

    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);        
    gridview.setAdapter(new ImageAdapter(this, mImgFilenames));

使用图像适配器:

public class ImageAdapter extends BaseAdapter {
private Context mContext;
private List<String> mPaths;

// Store the list of image IDs
public ImageAdapter(Context c, List<String> paths) {
    mContext = c;
    this.mPaths = paths;
}

// Return the number of items in the Adapter
@Override
public int getCount() {
    return mPaths.size();
}

// Return the data item at position
@Override
public Object getItem(int position) {
    return mPaths.get(position);
}

// Will get called to provide the ID that
// is passed to OnItemClickListener.onItemClick()
@Override
public long getItemId(int position) {
    return 0;
}

// Return an ImageView for each item referenced by the Adapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView = (ImageView) convertView;
    if (imageView == null) {
     //typical code for new view
    }

    //load the image    
    Bitmap bmImg = BitmapFactory.decodeFile((String) getItem(position));
    imageView.setImageBitmap(bmImg);
    return imageView;
}

}

所以我不是在谈论实现的强制方法是什么,而是说适配器的基础架构需要什么才能作为一个。说到这一点,我不知道应该返回 getItemId

1 个答案:

答案 0 :(得分:0)

您的ImageAdapter应该ArrayAdapter,而不是BaseAdapter。然后,你只需要担心getView()而不必担心。

  

然后覆盖构造函数以从绝对路径加载所有文件?

请使用Picasso之类的库异步加载图像。 在主应用程序线程上执行磁盘I / O.您可以在getView()本身中执行此操作,因为需要图像。

  

如何手动将路径添加到实际数组?

您已有一系列路径。它被称为paths(作为当前ImageAdapter的构造函数参数)和mPaths(作为当前ImageAdapter的数据成员)。