如何知道用户是否更改了切换按钮的状态?

nil*_*ila 13 android android-togglebutton

我有十个切换按钮.我想在单击主页按钮时保存其中五个按钮的状态.但我想保存它只有当用户对任何按钮的状态进行了更改时.有没有办法在不使用setOnClickListener()的情况下知道状态的变化?

syd*_*ydd 30

我做了以下,它不太好,但它的工作原理:

ttsButton = (ToggleButton) findViewById(R.id.solution_ttsbutton);
ttsButton.setOnCheckedChangeListener(toggleButtonChangeListener);
...
// gets called, if the button state changes
final CompoundButton.OnCheckedChangeListener toggleButtonChangeListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // The user changed the button, do something
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我想以编程方式更改按钮而不执行更改侦听器,则执行以下操作:

ttsButton.setOnCheckedChangeListener(null);
ttsButton.setChecked(false);
ttsButton.setOnCheckedChangeListener(toggleButtonChangeListener);
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 15

使用CompoundButton.OnCheckedChangeListener课程.

ToggleButton button = /* ... */;
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // Save the state here
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想使用一个监听器:

CompoundButton.OnCheckedChangeListener listener =
        new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        String key = null;
        switch(buttonView.getId()) {
            case R.id.button1:
                key = "key1";
                break;
            case R.id.button2:
                key = "key2";
                break;
            default:
                return;
        }
        // Save the state here using key
    }
});

ToggleButton button1 = /* ... */;    
button1.setOnCheckedChangeListener(listener);

ToggleButton button2 = /* ... */;
button2.setOnCheckedChangeListener(listener);
Run Code Online (Sandbox Code Playgroud)

但是有很多方法可以真正实现这一点.因此,您可以构建另一种更适合您需求的方法.

  • 我认为这不能回答这个问题.更精确的表述是:如何区分button.setChecked(); 和用户点击?在两种情况下都会调用onCheckedChanged. (8认同)

ult*_*aon 9

有一种简单的方法可以知道用户是否单击了CompoundButton(CheckBox,Switch,RadioButton,ToggleButton),使用以下命令:

new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { if (compoundButton.isPressed()) { // do something related to user click/tap } else { // do something related to programmatically state changes (checked/unchecked) } } }

  • 这应该是公认的答案,除非有人能证明`.isPressed()`没有切换其他输入设备,如手写笔(但我怀疑) (2认同)