我有一个GridView,使用自定义适配器(myAdapter扩展BaseAdapter),其中网格中的每个项目都包含一个ImageButton。 getView()工作正常。
但是,从我的代码中的其他地方开始,如何根据GridView中的位置更新网格中某个特定项目的图像(setImageResource)?
到目前为止,我已将此添加到我的适配器类:
public void changeImage() {
Log.d(TAG, "Image change");
this.ImageButton.setImageResource(R.drawable.newImage);
}
并且想写这样的东西:mygridview.getItemIdAtPosition(20).changeImage();
(不编译)。
答案 0 :(得分:3)
如果你想更新网格中某个特定项目的图像,你可以做的是......为网格中的所有图像都有一个onClickListener。
现在,当您点击任意图像时,获取图像的位置并更改该特定图像的背景资源。
示例:
添加图片时: imageView.setOnClickListener(imageListener);
听众会像dis:
private OnClickListener imageListener = new OnClickListener() {
public void onClick(View v) {
int id = v.getId();
ImageView imgView = imageArray.get(id);
imgView .setBackgroundResource(R.drawable.newImage);
};
我希望你觉得它有用。
答案 1 :(得分:3)
如果GridView中的图像我做了这个,它也有效:
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View imgView, int position, long id) {
ImageView imageView = (ImageView) imgView;
imageView.setImageResource(R.drawable.newImage);
}
}); }
答案 2 :(得分:0)
这也是我的最后一个问题。在这里我的解决方案我使用数据模型和适配器为我的RecyclerView 首先,将新数据注册到您的模型
DataModel detail = new DataModel(id, name, sat, image);
之后,使用set将旧值替换为新值
mData.set(index, detail);
最后,刷新适配器
if(adapter!=null)
adapter.notifyItemChanged(index);