60


switch.setChecked(true);トリガーせずに Android Switch ウィジェットの状態をプログラムで変更する方法を探していますOnCheckedChangedlistener

私の最初の考えは、それを交換することでしたOnClickListenerが、これはクリックを登録するだけで、クリックするだけでなくスイッチをスライドさせることもできるため、ユーザーがスイッチをオフからオンにスライドするかのように、実際には目的に適合しませんユーザーがクリックしていないため、スイッチは実際には何もしません...

誰かがこれに対する解決策または賢明な回避策を持っているなら、それは素晴らしいでしょう

4

10 に答える 10

60

setCheck()関数を呼び出す前にリスナーをnullに設定し、その後、次のように有効にします。

switch.setOnCheckedChangeListener (null);
switch.setChecked(true);
switch.setOnCheckedChangeListener (this);

参照: onCheckChanged をトリガーせずにチェックボックスの値を変更する

于 2016-07-18T11:16:34.230 に答える
40

コードでスイッチを使用して処理を行う直前に、リスナーの登録を解除し、必要なことを行ってから、リスナーを再度登録することができます。

于 2014-09-03T10:34:47.900 に答える
20

私には1つの解決策があり、最後にうまく機能しています。スイッチ コントロールに setOnTouchListener と setOnCheckedChangeListener を追加し、次のコードを追加して問題を解決しました。

    // set tag by default.
    mMySwitch.setTag("TAG");

    // Add OnCheckedChangeListener.
    mMySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (mMySwitch.getTag() != null) {
                 mMySwitch.setTag(null);
                 return;
                }

          // Do your stuff here.
        }
    });

    // Add Touch listener.
    mMySwitch.setOnTouchListener(new View.OnTouchListener() {
         @Override
         public boolean onTouch(View v, MotionEvent event) {
            mMySwitch.setTag(null);
            return false;
         }
    });

このように、setOnCheckedChangeListener は、ドラッグ、クリック、タッチによる人間の介入によってチェックが変更された場合にのみ呼び出されます。

また、スイッチ コントロールのチェック ステータスを変更しようとするときに、有効な文字列タグ ( null ではない) を追加することを忘れないでください。お気に入り :

 mMySwitch.setTag("TAG");
 mMySwitch.setChecked(true);
于 2015-09-28T09:45:52.210 に答える
-1

ここで何もうまくいかない場合は、トリッキーな解決策です。

スイッチの上に textview を作成し、clickListener を textview に追加します。

 <TextView
        android:elevation="1dp"
        android:id="@+id/switchLabel"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text=""
        app:layout_constraintBottom_toBottomOf="@id/switch1"
        app:layout_constraintStart_toStartOf="@+id/switch1"
        app:layout_constraintTop_toTopOf="@id/switch1"
        app:layout_constraintEnd_toEndOf="@id/switch1" />

テキストビューに高揚を追加します。

于 2021-03-15T11:57:16.133 に答える