web-dev-qa-db-ja.com

ToggleButtonの状態をプログラムで変更するにはどうすればよいですか?

ToggleButtonを次のように定義しています。

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

そして、プログラムでその状態を変更したいと思います。 setCheckedメソッドとtoggleメソッドを使用してみましたが、どちらも私の状況では機能しません。

継続的な通知があり、アクティビティが通知インテントを受信したら、トグルボタンをチェックしないように設定する必要がありますが、機能していません。

アクティビティのonResumeでこれを行っています。コードは実行されていますが、ToggleButtonの状態は変わりません。

奇妙なことに、アクティビティのonCreatesetChecked(false)を呼び出すと、ボタンの状態は変更されますが、onResumeでは変更されません。何が足りないのですか?

ありがとう。

9
Franco

とった。やや。

私はこれを持っていました

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

        Intent intent;

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

            toggle.setChecked(false);

            finish();
        }
    }

しかし、finishの呼び出しは実際には何もしていませんでした。私はそれを削除しました、そして今それは働きます。これがそれを修正した理由の手がかりではありません。

誰かが説明したいですか?

15
Franco

アクティビティが完了し、終了する必要がある場合は、Finishに電話してください。 ActivityResultは、onActivityResult()を介して起動したユーザーに伝播されます。

したがって、あなたの場合、トグルボタンの状態を変更する代わりに、onCreate()またはonPause ...などの呼び出しメソッドに戻ります。

フィニッシュの使用に関する詳細 ここ.....

1
Saty

私は同じ問題を抱えていました。状態を設定する前にToggleButton#isChecked()メソッドを呼び出すことで修正しました。

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

動作するはずです。

Falseに設定した後に実行されるコード内のどこかにsetChecked(true)の呼び出しがないことを確認してください。おそらくOnCheckedChangeListenerの中に?

0
Aleadam