【问题标题】:Reset counter after button click单击按钮后重置计数器
【发布时间】:2017-04-05 22:35:01
【问题描述】:

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 + ")");
                        }
                    }
                }
            });

我现在的问题是单击删除按钮时,它显示“删除”,但是当我选中复选框时,计数器没有重置。如何重置计数器?

编辑

我已将计数器更改为 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;
                    }
                }
            }
        });

当我单击button 删除时,按钮显示DELETE。但是,当我 再次按下另一个复选框,计数器从最后一组开始 值而不是 1。

请帮忙。

这是我的应用屏幕截图的一部分

https://i.stack.imgur.com/R954N.jpg

【问题讨论】:

  • 你在做的重置是什么意思 counter = 0
  • 您必须在删除 onclick 侦听器中将 checkBoxCounter 设置为 0。您更新的counter 值可能不是checkBoxCounter 的错字。
  • @jiteshmohite 每次单击删除按钮时,该按钮都会设置Text 'DELETE'。它应该始终将计数器重置为 0。但是当我选中复选框时,按钮 setText 显示DELETE(3)
  • @UmaKanth 我更改了变量,但结果仍然相同。有两个不同的类,变量的名称必须相同?
  • 欢迎您。如果我是你,我会在适配器中定义 int 并通过函数从那里进行控制。

标签: android listview checkbox counter


【解决方案1】:

如果有两个不同的类,则在适配器类中添加一个方法来重置计数器。

可能是这样的:

  1. 在适配器类中,添加:

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

    adapter.resetCheckedCounter();
    

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    在 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 + ")");
                            }
                        }
                    }
                }); 
    

    【讨论】:

    • 再次查看我的帖子。谢谢
    【解决方案3】:

    你需要在删除点击监听器中使用checkBoxCounter = 0 而不是counter = 0

    【讨论】:

    • 我把计数器改成了checkBoxCounter,结果还是一样
    • 如果你的变量不是静态的并且在显示和更新计数器时使用相同的变量,你的变量是静态的吗
    • @jiteshmohite 我注意到你已经留下很多 cmets 要求 OP 接受答案。请参阅meta.stackoverflow.com/questions/251288/… 对此进行讨论。在这个问题上,你真的不应该留下这样的 cmets,因为 OP 清楚地知道系统是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多