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条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab