有问题的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 。
答案 0 :(得分:0)
您的ImageAdapter
应该ArrayAdapter
,而不是BaseAdapter
。然后,你只需要担心getView()
而不必担心。
然后覆盖构造函数以从绝对路径加载所有文件?
请使用Picasso之类的库异步加载图像。 不在主应用程序线程上执行磁盘I / O.您可以在getView()
本身中执行此操作,因为需要图像。
如何手动将路径添加到实际数组?
您已有一系列路径。它被称为paths
(作为当前ImageAdapter
的构造函数参数)和mPaths
(作为当前ImageAdapter
的数据成员)。