首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CheckBox onCheckedChanged不能正常工作

CheckBox onCheckedChanged不能正常工作
EN

Stack Overflow用户
提问于 2017-05-08 20:56:58
回答 1查看 89关注 0票数 0

你好,我用我的自定义适配器创建了一个列表。每一行都有复选框、textView、textView。在我的适配器中,我已经创建了方法onCheckedChanged。当我让Toast检查每个单击项的状态时,它的工作原理是正常的,但是当我想要在主活动中删除选定的项目时,它总是只删除我的最后一个元素。有人能给我小费吗?这是我的适配器代码

代码语言:javascript
复制
 public View getView(final int position, final View convertView, ViewGroup parent) {
        View row = convertView;
        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(resource, parent, false);

            holder = new RowBeanHolder();
            holder.txtTitle=(TextView) row.findViewById(R.id.name);
            holder.indicator=(TextView) row.findViewById(R.id.indicator);
            holder.checkBox=(CheckBox) row.findViewById(R.id.checkBoxDelete);
            holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    ProductList element=(ProductList) holder.checkBox.getTag();
                    element.setSelected(isChecked);
                    //Toast.makeText(context,element.getSelected(),Toast.LENGTH_SHORT).show(); it show my current state
                }
            });
            row.setTag(holder);
            holder.checkBox.setTag(data.get(position));
        }
        else
        {
            holder = (RowBeanHolder)row.getTag();
            ((RowBeanHolder) row.getTag()).checkBox.setTag(data.get(position));

        }

        if(longPressed){
            showCheckbox();
        }
        else{
            hideCheckbox();
            uncheck();
        }

        ProductList object = data.get(position);
        holder.txtTitle.setText(object.getName());
        holder.indicator.setText(object.getToBuy() + "/" + object.getBought());
        holder.checkBox.setChecked(data.get(position).isSelected());

        return row;
    }

以及我的删除操作

代码语言:javascript
复制
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_delete:
                for(ProductList p:items){
                    if(p.isSelected()) items.remove(p);
                }
                mode.finish();
                return true;
            default: return false;
        }
    }

以这种方式传递数据

代码语言:javascript
复制
adapter = new RowAdapter(context,R.layout.row,items);
                    listView.setAdapter(adapter);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-08 21:23:11

像这样改变逻辑,

代码语言:javascript
复制
public View getView(final int position, final View convertView, ViewGroup parent) {
        View row = convertView;


        RowBeanHolder holder;
        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(resource, parent, false);

            holder = new RowBeanHolder();
            holder.txtTitle=(TextView) row.findViewById(R.id.name);
            holder.indicator=(TextView) row.findViewById(R.id.indicator);
            holder.checkBox=(CheckBox) row.findViewById(R.id.checkBoxDelete);
            holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int itemPos = buttonView.getTag();
                    ProductList element = data.get(itemPos);
                    element.setSelected(isChecked);
                    //Toast.makeText(context,element.getSelected(),Toast.LENGTH_SHORT).show(); it show my current state
                }
            });
            row.setTag(holder);
            holder.checkBox.setTag(position);
        }
        else
        {
            holder = (RowBeanHolder)row.getTag();
            ((RowBeanHolder) row.getTag()).checkBox.setTag(position);

        }

        if(longPressed){
            showCheckbox();
        }
        else{
            hideCheckbox();
            uncheck();
        }

        ProductList object = data.get(position);
        holder.txtTitle.setText(object.getName());
        holder.indicator.setText(object.getToBuy() + "/" + object.getBought());
        holder.checkBox.setChecked(data.get(position).isSelected());

        return row;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43857145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档