如何以编程方式更改 ToggleButton 状态?

发布于 2024-11-05 17:29:19 字数 521 浏览 0 评论 0原文

我有一个这样定义的 ToggleButton:

<ToggleButton android:text="ToggleButton" android:id="@+id/toggle"
    android:layout_height="wrap_content" android:layout_width="fill_parent"></ToggleButton>

我想以编程方式更改其状态。我尝试使用 setChecked 和 toggle 方法,但这些方法都不适合我的情况。

我有一个持续的通知,当我的活动收到通知意图时, 切换按钮应设置为不选中,但它不起作用。

我在活动的 onResume 上执行此操作。代码正在执行,但 ToggleButton 的状态没有改变。

奇怪的是,如果我在活动的 onCreate 上调用 setChecked(false) ,它确实会更改按钮的状态,但不会在 onResume 上调用。我缺少什么?

谢谢。

I have a ToggleButton defined like this:

<ToggleButton android:text="ToggleButton" android:id="@+id/toggle"
    android:layout_height="wrap_content" android:layout_width="fill_parent"></ToggleButton>

And I want to change its state programmatically. I tried using the setChecked and toggle methods, but neither of those works in my situation.

I have an ongoing notification and when my activity receives the notification intent, the
toggle button should be set to not checked, but it's not working.

I'm doing this on the activity's onResume. The code is being executed but the ToggleButton's state doesn't change.

Weirdly, if I call setChecked(false) on the activity's onCreate it does changes the button's state, but not on onResume. What am I missing?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

燃情 2024-11-12 17:29:19

知道了。有点儿。

我有这个

    protected void onResume() {
        super.onResume();

        Intent intent;

        if ((intent = getIntent()) != null && MainActivity.STOP.equals(intent.getAction())) {
            disable();

            toggle.setChecked(false);

            finish();
        }
    }

但是对 finish 的调用实际上没有做任何事情。我删除了它,现在它可以工作了。不知道为什么会解决这个问题。

有人愿意解释一下吗?

Got it. Kind of.

I had this

    protected void onResume() {
        super.onResume();

        Intent intent;

        if ((intent = getIntent()) != null && MainActivity.STOP.equals(intent.getAction())) {
            disable();

            toggle.setChecked(false);

            finish();
        }
    }

But the call to finish wasn't actually doing anything. I removed it and now it works. Not a clue why this fixed it.

Someone care to explain?

二智少女 2024-11-12 17:29:19

它应该有效。

检查在将其设置为 false 后执行的代码中的其他位置是否没有调用 setChecked(true)。也许在 OnCheckedChangeListener 内?

It should work.

Check that you don't have a call to setChecked(true) somewhere else in the code that is executed after you set it to false. Perhaps inside an OnCheckedChangeListener?

自找没趣 2024-11-12 17:29:19

当您的活动完成并应该关闭时,调用“完成”。 ActivityResult 将传播回通过 onActivityResult() 启动您的任何人。

因此,在您的情况下,它不会更改切换按钮状态,而是返回到其调用方法,该方法可能是 onCreate() 或 onPause...

有关使用 finish 这里......

Call Finish when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().

So in your case Instead of changing the toggle Button state it goes back to its calling method which may be the onCreate() or onPause...

Details about using finish here.....

浅浅 2024-11-12 17:29:19

我也有同样的问题。我通过在设置状态之前调用 ToggleButton#isChecked() 方法修复了它。

if (mToggleSwitch.isChecked()) {
    mToggleSwitch.setChecked(false);
}

I was having the same issue. I fixed it by calling ToggleButton#isChecked() method before setting the state.

if (mToggleSwitch.isChecked()) {
    mToggleSwitch.setChecked(false);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文