Android 在适配器中的ImageView上设置标记并记住这些标记

Android 在适配器中的ImageView上设置标记并记住这些标记,android,gridview,imageview,adapter,Android,Gridview,Imageview,Adapter,大家好,我的社区 假设我有一个函数setTags(),它提供适配器标记的ImageView,如下代码所示: public class ImageAdapter extends BaseAdapter { private ArrayList<Bitmap> crops; private Context mContext; public ImageAdapter(Context c, ArrayList<Bitmap> crops) { mContext = c;

大家好,我的社区

假设我有一个函数setTags(),它提供适配器标记的ImageView,如下代码所示:

public class ImageAdapter extends BaseAdapter {

private ArrayList<Bitmap> crops;
private Context mContext;

public ImageAdapter(Context c, ArrayList<Bitmap> crops) {
    mContext = c;
    this.crops = crops;
    setTags();
}

public int getCount() {
    return crops.size();
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageBitmap(crops.get(position));
    return imageView;
}
public void setTags(){
    for(int i = 0; i<getCount();i++){
        ImageView img = new ImageView(mContext);
        img.setImageBitmap(crops.get(i));
        img.setTag(i);
        img = null;         
    }
}
公共类ImageAdapter扩展了BaseAdapter{
私营种植园作物;
私有上下文;
公共ImageAdapter(上下文c、ArrayList){
mContext=c;
这个。农作物=农作物;
setTags();
}
public int getCount(){
返回作物。大小();
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
//为适配器引用的每个项目创建新的ImageView
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
如果(convertView==null){//如果它没有被回收,初始化一些属性
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(85,85));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
setImageBitmap(crops.get(position));
返回图像视图;
}
公共void setTags(){

对于(int i=0;i标记将不会保留,您将它们设置为新创建的
ImageView
s(然后为空),而不是
getView
中的
ImageView
s

您可以在
setTags()
方法中为位图设置标记,然后在
getView
imageView.setTag(getItem().getTag());
中设置标记,但正如我看到的,您只是将
position
设置为标记,因此您可以严格地
imageView.setTag(position);

所以在
getView

imageView.setImageBitmap(getItem(position));
imageView.setTag(position);
请注意,当您使用
setOnItemClickListener
时,您将在回调方法中获得普通位置(如下所示)(或者您可能出于其他目的需要它们…)

@覆盖
public void onItemClick(适配器视图适配器、视图、,
内部位置,长id){
} 
imageView.setImageBitmap(getItem(position));
imageView.setTag(position);
@Override
public void onItemClick(AdapterView<?> adapter, View view, 
        int position, long id) {

}