按钮点击后重置计数器

8
DeleteTask 中,我有一个按钮用于在 listView 中选中复选框时删除列表。
delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int itemCount = listview.getCount();
                for (int i = itemCount - 1; i >= 0; i--) {
                    SearchList search = adapter.getItem(i);
                    if (search.isSelected()) {
                        adapter.removeItem(i);
                        delete.setText("DELETE");
                        counter=0;
                    }
                }
            }
        });

DeleteAdapter中,它有一个计数器用于计算选中的复选框并在button中显示计数器。一旦点击删除button,计数器应重置为0,并且只在删除button setText中显示DELETE
 holder.ckbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (((CheckBox) v).isChecked()) {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((CheckBox)v).isChecked()); // Set the value of checkbox to maintain its state.
                        checkBoxCounter ++;
                        delete.setText("DELETE"+""+"("+ checkBoxCounter +")");
                    } else
                    {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((CheckBox) v).isChecked()); // Set the value of checkbox to maintain its state.
                        checkBoxCounter--;
                        if (checkBoxCounter == 0) {
                            delete.setText("DELETE");
                        }
                        else {
                            delete.setText("DELETE" + "" + "(" + checkBoxCounter + ")");
                        }
                    }
                }
            });

我的问题是当点击删除按钮时,会显示'DELETE',但是当我选中复选框时,计数器没有重置。如何重置计数器?
编辑
我已将计数器更改为checkBoxCounter,但仍然得到相同的结果!
 delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int itemCount = listview.getCount();
                for (int i = itemCount - 1; i >= 0; i--) {
                    SearchList search = adapter.getItem(i);
                    if (search.isSelected()) {
                        adapter.removeItem(i);
                        delete.setText("DELETE");
                        checkBoxCounter=0;
                    }
                }
            }
        });

当我点击“删除”按钮时,按钮上会显示“DELETE”。但是,当我再次按下另一个复选框时,计数器从上次的设置值开始而不是从1开始。
请帮忙查看。这是我的应用程序截图的一部分。 https://istack.dev59.com/R954N.webp

你说的重置是指将计数器归零吗? - Jitesh Mohite
在删除的点击监听器中,您需要将 checkBoxCounter 设置为 0。可能是一个笔误,您正在更新 counter 值而不是 checkBoxCounter - Uma Kanth
@UmaKanth 我改变了变量,但结果仍然相同。有两个不同的类,变量的名称必须相同吗? - Hoo
@mismanc,我的问题已经解决了。谢谢。 - Hoo
1
欢迎您。如果我是您,我会在适配器中定义int,并通过函数来控制它。 - misman
显示剩余6条评论
3个回答

10
如果有两个不同的类,则在适配器类中添加一个方法来重置计数器。可能会像这样:
  1. 在适配器类中添加:

    public void resetCheckedCounter(){
        checkBoxCounter = 0;
    }
    
  2. 对于 "删除" 按钮,添加:

  3. adapter.resetCheckedCounter();
    

希望这能帮到你!


4

在 onClick() 函数内部分配 checkBoxCounter = 0。为了安全起见,您可以更改以下代码以避免从代码的其他部分更新 checkBoxCounter。

 holder.ckbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (((CheckBox) v).isChecked()) {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((CheckBox)v).isChecked()); // Set the value of checkbox to maintain its state.
                        checkBoxCounter ++;
                        delete.setText("DELETE"+""+"("+ checkBoxCounter +")");
                    } else
                    {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((CheckBox) v).isChecked()); // Set the value of checkbox to maintain its state.
                        checkBoxCounter--;
                        if (checkBoxCounter <= 0) {
                            delete.setText("DELETE");
                            checkBoxCounter = 0;
                        }
                        else {
                            delete.setText("DELETE" + "" + "(" + checkBoxCounter + ")");
                        }
                    }
                }
            }); 

请再次检查我的帖子。谢谢。 - Hoo

2

在删除点击监听器中,需要将 counter = 0 改为 checkBoxCounter = 0


我已将计数器更改为checkBoxCounter,但结果仍然相同。 - Hoo
你的变量是否为静态变量?如果不是,请将其更改为静态变量,并在显示和更新计数器时使用同一变量。 - Jitesh Mohite
让我们在聊天中继续这个讨论 - Jitesh Mohite
2
@jiteshmohite 我注意到你一直在留下很多评论要求OP接受答案。请参考http://meta.stackoverflow.com/questions/251288/dealing-with-an-answer-that-wasnt-accepted-maybe-because-a-user-is-a-newbie-on 进行讨论。在这个问题上,你真的不应该留下这样的评论,因为OP显然知道系统是如何工作的。 - josliber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接