我有一个GridView使用ImageView元素的自定义适配器。我想更改ImageView onItemClick,我有点击的条件。如果单击的项目可用,我将更改图像。但是,当我更改项目的图像资源时,我必须通过adapter.notifyDataSetChanged();来更新整个GridView。我的GridView有100个元素,所以更新它们都需要花费我半秒钟的延迟而且令人不安。我如何只更新我已更改的元素?
这是适配器中的getView()方法。
public View getView(final int position, View convertView, ViewGroup parent) {
Point point;
View v = null;
point=items.get(position);
int resId;
resId=point.getBackground();
v = inflater.inflate(R.layout.item, null);
ImageView tv = (ImageView) v.findViewById(R.id.image_button);
tv.setImageResource(resId);
return v;
}
这是Point对象
上的getBackground()方法public int getBackground(){
int backId=(R.drawable.button_initial);
if(isFilled){
backId=(R.drawable.button_clicked);
}
else if(isAvailable){
backId=(R.drawable.button_green);
}
return backId;
}
提前致谢。
答案 0 :(得分:0)
您应该更新项目列表中的点,然后调用notifyDataSetChanged();
最好是在活动中那样做..就像那样
List<Point> points = new ArrayLIst<Point>;
Adapter adapter = new Adapter(points);
gridView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Point p = items.get(position);
p.setBackground(..);
adapter.notifyDataSetChanged();
}
@Override public void onNothingSelected(AdapterView<?> parent) {
}
});