Android复选框在更改之前如何监听点击事件

4

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

我的意思是,OnCheckedChanged 监听器仅在复选框状态发生变化后才会触发,而我想在其更改状态之前监听点击事件。


你尝试过使用setOnClickListener吗? - Sree
似乎你需要自己编写复选框,或者你可以尝试使用CheckedTextView,它可能具有更大的自定义性。显然,你想要决定何时显示勾选标记以及何时调用监听器。 - user9599745
5个回答

6

您可以使用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);


3
IMO你应监听ACTION_UP,以防用户在按下复选框后拖动手指并在抬起之前离开。大多数系统组件都是这样工作的。 - tir38
@tir38 因为我们将在事件后立即显示对话框,用户将没有机会拖动手指。而且,由于我们在警报中要求确认,因此不会出现用户意外选中复选框的情况。 - Rahul Tiwari

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

3
如果我使用 OnCheckChangeListener,UI 将在其被调用之前更新。因此,即使我立即通过调用 setChecked(false) 撤消点击,屏幕上仍会出现一个小的 "闪烁",因为复选框已更改。 - tir38

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

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

        }
    });

1
你可以设置 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) 撤销了点击,屏幕上仍会出现一个小的“闪烁”,因为复选框状态会快速改变。 - tir38

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