首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加新项目时,“回收者视图”复选框会自行取消标记。

添加新项目时,“回收者视图”复选框会自行取消标记。
EN

Stack Overflow用户
提问于 2022-09-09 14:13:46
回答 1查看 12关注 0票数 0

我已经创建了一个回收视图适配器,从列表中提取物品,根据他们的位置。目前,当我尝试添加一个新项目时,它当前会取消一些项目,而不是其他项目(那些超出第7位的项目)。我的原始代码是:

代码语言:javascript
运行
复制
public void onBindViewHolder(ViewHolder holder, int position){
        db.openDatabase();

        ShoppingModel item = shoppingList.get(position);
        holder.item.setText(item.getItem());
        holder.item.setChecked(toBoolean(item.getStatus()));
        if(holder.item.isChecked()){
            holder.item.setTextColor(Color.GRAY);
        }

        holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    db.updateStatus(item.getId(), 1);
                }
                else{
                    db.updateStatus(item.getId(), 0);
                }
            }
        });

我当时以为我没有更新shoppingList或条目,所以我添加了以下代码来获取:

代码语言:javascript
运行
复制
public void onBindViewHolder(ViewHolder holder, int position){
        db.openDatabase();

        ShoppingModel item = shoppingList.get(position);
        holder.item.setText(item.getItem());
        holder.item.setChecked(toBoolean(item.getStatus()));
        if(holder.item.isChecked()){
            holder.item.setTextColor(Color.GRAY);
        }

        holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    db.updateStatus(item.getId(), 1);
                    holder.item.setTextColor(Color.GRAY);
                    shoppingList.get(holder.getAbsoluteAdapterPosition()).setStatus(1);
                    holder.item.setChecked(true);
                }
                else{
                    db.updateStatus(item.getId(), 0);
                    holder.item.setTextColor(Color.BLACK);
                    shoppingList.get(holder.getAbsoluteAdapterPosition()).setStatus(0);
                    holder.item.setChecked(false);
                }
            }
        });

但打开盒子的问题依然存在。如果需要,可以找到完整的代码https://github.com/PhilipDW183/ShoppingListApp。任何想法都将不胜感激,或任何指导!

提前感谢!

EN

Stack Overflow用户

发布于 2022-09-09 14:54:08

不知道为什么,但这似乎解决了这个问题:

代码语言:javascript
运行
复制
private int status;


holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    status = 1;
                    holder.item.setTextColor(Color.GRAY);
                } else {
                    status = 0;
                    holder.item.setTextColor(Color.BLACK);
                }
                updateItem(holder.getAbsoluteAdapterPosition(), status);
            }
        });


public void updateItem(int position, int status){
        ShoppingModel item = shoppingList.get(position);
        db.updateStatus(item.getId(), status);
        shoppingList.get(position).setStatus(status);
    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73663492

复制
相关文章

相似问题

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