adapter中有select或是check属性的时候界面恢复问题

问题,图片预览时选取照片,返回界面恢复时出现错乱。主要是界面往上滑的时候遮盖了部分内容,返回的时候恢复就错乱了,直接到了下一行。

    @Override
    protected void onResume() {
        super.onResume();
        btn_complete.setText("完成(" + MyURL_Flag.imgList.size() + "/" + size + ")");
        try {
            List<String> list = album.getPhotos();
            int a = imgGridView.getFirstVisiblePosition();
            int b = imgGridView.getLastVisiblePosition();
            LogUtil.log(refNO, "開始位置" + a + "\t結束位置:" + b);

            for (int i = a; i <= b; i++) {
                View child = imgGridView.getChildAt(i);
                ImageButton box = (ImageButton) child.findViewById(R.id.checkBox1);
                if (MyURL_Flag.imgList.contains(list.get(i))) {
                    box.setSelected(true);
                } else {
                    box.setSelected(false);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

这段代码是在onresume中恢复界面的一段,之前用了checkbox,后面改了imagebutton,解决原理是一样的。
解决的方法就是adapter中settag,tag决定了view的类型的位置,使用findviewwithtag方法就不会错乱了。
解决代码:

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Holder holder;
        if (position != index && position > index) {
            index=position;
            convertView=LayoutInflater.from(context).inflate(R.layout.imgsitem, null);
            holder=new Holder();
            holder.imageView=(ImageView) convertView.findViewById(R.id.imageView1);
            holder.checkBox=(ImageButton) convertView.findViewById(R.id.checkBox1);
            holder.imgId = (TextView) convertView.findViewById(R.id.tv_id);

            convertView.setTag(holder);
            holderlist.add(convertView);
        }else {
            holder= (Holder)holderlist.get(position).getTag();
            convertView=holderlist.get(position);
        }

        holder.imageView.setTag("img" + position);
        holder.checkBox.setTag("box" + position);


        holder.checkBox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                clickedListener.onViewClicked(v, position);
            }
        });
        return convertView;
    }
    @Override
    protected void onResume() {
        super.onResume();
        btn_complete.setText("完成(" + MyURL_Flag.imgList.size() + "/" + size + ")");
        try {
            List<String> list = album.getPhotos();
            int a = imgGridView.getFirstVisiblePosition();
            int b = imgGridView.getLastVisiblePosition();
            for (int i = a; i <= b; i++) {
                ImageButton box = (ImageButton) imgGridView.findViewWithTag("box" + i);
                if (MyURL_Flag.imgList.contains(list.get(i))) {
                    box.setSelected(true);
                } else {
                    box.setSelected(false);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值