sola_f 2015-01-19 13:15 采纳率: 100%
浏览 2103
已采纳

GridView超出屏幕时,数据没保存会重复显示

我在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;
                }
            }
        });

    }

}
  • 写回答

3条回答 默认 最新

  • danielinbiti 2015-01-19 14:52
    关注

    关键的getView中的代码没有贴出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?