我在GridView中用SimpleAdapter的getView()方法加载适配器,每个Item里有一个ImageView 和一个TextView,还有一个ImageView显示打勾的图片,当我在第一个ImageView打勾保存时,滑动在最下面,最下面的Item对自动打勾,并且第一个打勾会消失,
查了一下,好像是出现这种现象的原因,是当最上边的item移除屏幕后,它的对象会被缓存。而下一个要从底部出来,要显示的item出现的时候,会判断其布局(context)与缓存中的是否一样。一样的情况下,会把缓存里的context作为getView的参数传进来。这样在画最后一个item的时候,由于没有对ImageView做任何改动,所以系统就将第一个的ImageView 内容显示出来了。现在不知道怎么改求大神指导下
public class AddActivity extends Activity {
private GridView gridView;
private TextView checkNum;
private List<HashMap<String, Object>> list;
private HashMap<String, Object> hashMap;
private SimpleAdapter adapter;
private String texts[] = null;
private int images[] = null;
private int num=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_activity);
gridView = (GridView) findViewById(R.id.gridview);
checkNum = (TextView) findViewById(R.id.check_num);
list = new ArrayList<HashMap<String,Object>>();
images=new int[]{R.drawable.windy_7, R.drawable.ray_100,
R.drawable.yundong, R.drawable.ganmao,
R.drawable.xiche,R.drawable.liangshai,
R.drawable.fishing};
texts = new String[]{ "风力风向", "紫外线",
"运动提示", "感冒提示",
"洗车提示", "晾晒提示",
"旅游提示"};
for(int i=0;i<images.length;i++){
hashMap=new HashMap<String, Object>();
hashMap.put("imageView",images[i]);
hashMap.put("nameView", texts[i]);
hashMap.put("imageCheck", R.drawable.checkmark_small);
list.add(hashMap);
}
adapter = new SimpleAdapter(this, list, R.layout.gird_activity_item,
new String[]{"imageView","nameView","imageCheck"},
new int[]{R.id.grid_img,R.id.grid_text,R.id.check});
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long arg3) {
ImageView checkImage=(ImageView) view.findViewById(R.id.check);
switch (images[position]) {
case R.drawable.windy_7:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.ray_100:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.yundong:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.ganmao:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.xiche:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.liangshai:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
case R.drawable.fishing:
if (checkImage.getVisibility() == View.VISIBLE){
checkImage.setVisibility(View.INVISIBLE);
num--;
checkNum.setText(String.valueOf(num));
}else {
checkImage.setVisibility(View.VISIBLE);
num++;
checkNum.setText(String.valueOf(num));
}
break;
}
}
});
}
}