Android 更改gridVIew';将imageView设置在适配器外部

Android 更改gridVIew';将imageView设置在适配器外部,android,gridview,adapter,Android,Gridview,Adapter,我怎么做?这是GridView适配器中的方法 public static void changeView(Bitmap bmp, int pos){ GridView gridView = new GridView(mContext); ImageView view = (ImageView) gridView.getChildAt(pos); if (view == null) Log.e("ImageAdapter Error", "ImageV

我怎么做?这是GridView适配器中的方法

     public static void changeView(Bitmap bmp, int pos){


   GridView gridView = new GridView(mContext);

    ImageView view = (ImageView) gridView.getChildAt(pos);
    if (view == null)
    Log.e("ImageAdapter Error", "ImageView is null");
    }
这是一个getView方法

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {  
    //  imageView = Inflater.inflate(R.layout.image_layout, null);
        imageView = new ImageView(mContext);
        if (DefinedValues.width/3 < DefinedValues.height/4)
        imageView.setLayoutParams(new GridView.LayoutParams
                (DefinedValues.height/4, DefinedValues.height/4));
        else
            imageView.setLayoutParams(new GridView.LayoutParams
                    (DefinedValues.width/3-5, DefinedValues.width/3-5));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageResource(R.drawable.test3);

    return imageView;
}

在适配器中创建一个集合以保存需要应用的图像。当您需要更改特定
getView
行的图像时,请更改相应集合中的图像:

private Bitmap[] imgCollection;

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {  
        //  imageView = Inflater.inflate(R.layout.image_layout, null);
        imageView = new ImageView(mContext);
        if (DefinedValues.width/3 < DefinedValues.height/4)
            imageView.setLayoutParams(new GridView.LayoutParams
                    (DefinedValues.height/4, DefinedValues.height/4));
        else
            imageView.setLayoutParams(new GridView.LayoutParams
                    (DefinedValues.width/3-5, DefinedValues.width/3-5));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageBitmap(imgCollection[position]); // <-- changed 
    return imageView;
}


public void changeImageBitmap (Bitmap bmp, int pos) {
    imgCollection[pos] = bmp;
    notifyDataSetChanged(); // refresh the listview
}

在静态类中设置上下文对象mContext可以吗


不,绝对不是。根本不需要这样做。如果上下文是静态的,它可以阻止您的活动或其中的任何内容被垃圾收集。你的应用程序最终可能会因资源不足而崩溃。

你在哪里调用changeView()方法?你能告诉我你想实现什么吗,而且你没有在你发布的代码中将适配器设置为gridView。我有一个gridView片段,这个适配器连接到gridView。你的代码有问题,什么是图像类?您的适配器是什么关系?你是否正在创建空的gridview并试图在特定位置获取项目?罗马人,请提供更多关于你全球目标的信息。我相信你对这个问题的处理方法是错误的,但只有你进一步描述,我才能确定。谢谢!以前使用过it方法,但认为这不是正确的方法。
    DefinedValues.thumbnail.put("activity", DefinedValues.images);
    DefinedValues.thumbnail.put("type", "thumbnail");
    DefinedValues.thumbnail.put("name", this.name);
    DefinedValues.thumbnail.put("width", DefinedValues.width + "");

    //Creates request to server
    String req = Json.stringToJson(DefinedValues.thumbnail);
    Log.d(TAG, "downloadImage() called. Request to server: " + req);
    DefinedValues.thumbnail.clear();
    thumb = new ImageDownloader();
    thumb.setListener(MyImage.this);
    thumb.execute(req);


    Log.d(TAG, "downloaded thumbnail nr." + imageCount);

}


public void returnImage(Bitmap res) {
    Log.d(TAG, "Setting up thumbnail...");
    this.setThumbnail(res);
}
private Bitmap[] imgCollection;

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {  
        //  imageView = Inflater.inflate(R.layout.image_layout, null);
        imageView = new ImageView(mContext);
        if (DefinedValues.width/3 < DefinedValues.height/4)
            imageView.setLayoutParams(new GridView.LayoutParams
                    (DefinedValues.height/4, DefinedValues.height/4));
        else
            imageView.setLayoutParams(new GridView.LayoutParams
                    (DefinedValues.width/3-5, DefinedValues.width/3-5));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageBitmap(imgCollection[position]); // <-- changed 
    return imageView;
}


public void changeImageBitmap (Bitmap bmp, int pos) {
    imgCollection[pos] = bmp;
    notifyDataSetChanged(); // refresh the listview
}
    if (imgCollection[position] == null) {
        imageView.setImageResource(R.drawable.test3);
    } else {
        imageView.setImageBitmap(imgCollection[position]); // <-- changed           
    }