Listview,自定义适配器和复选框 [英] Listview, custom adapter and checkboxes

查看:106
本文介绍了Listview,自定义适配器和复选框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的适配器有问题。下面是代码:

i got an issue with my adapter. Here is the code:

@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
    final ViewHolder viewHolder;
    View view = convertView;
    if (view == null) {
        view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
        viewHolder = new ViewHolder();

        viewHolder.textTitle = (TextView) view.findViewById(R.id.title);
        viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);

        viewHolder.checkBox.setTag(position);
        view.setTag(viewHolder);

        viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);
    } else {
        viewHolder = (ViewHolder) view.getTag();
        viewHolder.checkBox.getTag(position);
    }

    viewHolder.textTitle.setText(getItem(position).getTitle());

    viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));
    viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                myIntegerArrayList.add(position);
            } else {
                myIntegerArrayList.remove((Object) position);
            }
        }
    });

    return view;
}

private static class ViewHolder {
    TextView textTitle;
    CheckBox checkBox;
}

复选框本身可以正常工作。.我的意思是,该位置已正确添加到我的数组列表,但是如果(假设我检查了位置0的项目)我滚动到底部,那么,滚动回顶部,则项目0返回未选中状态,即使该位置位于我的数组列表中(已通过日志验证)

The checkbox itself works fine.. I mean, the position is correctly added to my arraylist but if (assuming i checked the item at position 0) i scroll to bottom, then, scroll back to top the item 0 return unchecked even if the position is into my arraylist (verified with logs)

推荐答案

中移出 viewHolder.checkBox.setTag(position); 并在<$ c $中用 viewHolder.checkBox.getTag(); 更改位置 c> onCheckedChanged ,因此您的代码必须类似于:

move out viewHolder.checkBox.setTag(position); from if and change position with viewHolder.checkBox.getTag(); in onCheckedChanged, so your code must be like:

@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
    final ViewHolder viewHolder;
    View view = convertView;
    if (view == null) {
        view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
        viewHolder = new ViewHolder();

        viewHolder.textTitle = (TextView) view.findViewById(R.id.title);
        viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);


        view.setTag(viewHolder);

        viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);
    } else {
        viewHolder = (ViewHolder) view.getTag();
        viewHolder.checkBox.getTag(position);
    }
    viewHolder.checkBox.setTag(position);

    viewHolder.textTitle.setText(getItem(position).getTitle());

    viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));
    viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                myIntegerArrayList.add(viewHolder.checkBox.getTag());
            } else {
                myIntegerArrayList.remove((Object) viewHolder.checkBox.getTag());
            }
        }
    });

    return view;
}

您需要移出 viewHolder.checkBox.setTag(位置); 因为回收ListView ,您需要保存您的要在 onCheckedChanged 中获得该位置。

you need move out viewHolder.checkBox.setTag(position); because Recycle ListView, you need save your position in Tag to getting that in onCheckedChanged.

您需要使用 viewHolder.checkBox。 getTag(); in onCheckedChanged 因为同样的原因。

you need use viewHolder.checkBox.getTag(); in onCheckedChanged because same reason.

很高兴提供帮助

这篇关于Listview,自定义适配器和复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆