13

我有一个这样定义的 ToggleButton:

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

我想以编程方式改变它的状态。我尝试使用setCheckedandtoggle方法,但在我的情况下这些都不起作用。

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

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

奇怪的是,如果我调用setChecked(false)活动onCreate,它确实会改变按钮的状态,但不会改变 on onResume。我错过了什么?

谢谢。

4

4 回答 4

19

知道了。有点儿。

我有这个

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

        Intent intent;

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

            toggle.setChecked(false);

            finish();
        }
    }

但调用 tofinish实际上并没有做任何事情。我删除了它,现在它可以工作了。不知道为什么要修复它。

有人愿意解释吗?

于 2011-05-10T00:41:08.630 回答
1

它应该工作。

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

于 2011-05-09T21:52:40.303 回答
1

当您的活动完成并应关闭时调用 Finish。ActivityResult 被传播回通过 onActivityResult() 启动你的人。

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

关于在这里使用完成的详细信息......

于 2013-05-02T08:02:07.860 回答
1

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

if (mToggleSwitch.isChecked()) {
    mToggleSwitch.setChecked(false);
}
于 2019-12-17T07:35:17.647 回答