【问题标题】:Android checkbox listen for click before changeAndroid复选框在更改前监听点击
【发布时间】:2015-10-12 16:49:45
【问题描述】:

我需要为特定设置显示一个复选框。当用户点击复选框时,我想显示一个警报对话框。只有当用户点击确认按钮(或类似按钮)时,复选框才会更改。

我的意思是 OnCheckedChanged 监听器仅在复选框更改状态后触发,而我想在单击更改状态之前监听它。

【问题讨论】:

  • 你试过 setOnClickListener 吗?
  • 似乎您将不得不编写自己的复选框。或者你可以试试 CheckedTextView 可能有更大的定制。显然,您希望 tk 决定何时显示刻度以及何时调用侦听器。

标签: android checkbox


【解决方案1】:

您可以使用onTouchListener 并拦截ACTION_DOWN 事件以显示警报。 在用户选择以编程方式更改您的复选框的选中状态。

示例:

checkbox.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            //show alert
            return true; //this will prevent checkbox from changing state
        }
        return false;
    }
});

然后在用户选择是或否时调用checkbox.setChecked(true);checkbox.setChecked(false);。`

【讨论】:

  • IMO 您应该收听ACTION_UP,以防用户单击向下,然后在抬起之前将手指从复选框中拖出。大多数系统组件都以这种方式工作。
  • @tir38 因为我们将在事件发生后立即显示对话框,用户将没有机会拖动手指。由于我们在警报中要求确认,因此不会出现用户不小心选中复选框的情况
【解决方案2】:

使用这个:

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked==true){
                   //Show your alert

                    }
                }else if(isChecked==false){
                    //Show your alert
                }
            }
        });

【讨论】:

  • 如果我使用OnCheckChangeListener,UI 将在调用它之前更新。因此,即使我通过调用setChecked(false) 立即恢复点击,随着复选框的更改,屏幕上仍然会出现一个小“光点”
【解决方案3】:

如果建议在复选框上使用 OnTouchListener。如果满足您的条件,则可以调用 checkBox.performClick()。

【讨论】:

    【解决方案4】:

    你可以试试;

    checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if ( isChecked )
                {
                    // do anything
                    // perform logic
                }
    
            }
        });
    

    【讨论】:

      【解决方案5】:

      您可以设置onClickListener 并相应地设置复选框的checked 状态。

          myCheckBox.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // createYourDialog
                  // onPositiveButtonClicked
                  myCheckBox.setChecked(true);
                  // onNegativeButtonClicked
                  myCheckBox.setChecked(false);
      
                  // yourDialog.show();
              }
          });
      

      【讨论】:

      • 如果我使用OnClickListener,UI 将在调用它之前更新。因此,即使我通过调用setChecked(false) 立即恢复点击,屏幕上仍然会出现一个小的“光点”,因为复选框会快速更改状态。
      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 2020-03-13
      • 2011-12-20
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多