2017-04-02 6 views
-2

私はスイッチを持っています。それはそれでは(download)/(locate locally)/(cancel the dialog)スイッチの状態変化をプログラムで設定した状態と、ユーザが設定した状態変化を区別するにはどうすればよいですか?

2.TurnそれOFFを実行するためにDownload/locate/cancelオプションであなたにAlertDialogを示し、この 1.電源を入れますが

さて、当初想定したファイルを削除するには、Yes/NoオプションであなたにAlertDialogを示しように、スイッチの状態がある作品OFF。今度はONにすると、ListenerはOnCheckedをtrueとして登録します。次に、ダイアログをキャンセルすると、OnCheckedはファイルが見つからない/ダウンロードされていないため、falseに設定されます。この変更は、プログラムによって設定されていてもリスナーによって検出されます。私は分割する方法が必要Switch状態はユーザとプログラムによって引き起こされます。

リスナーはOnCheckedChangeListenerです。

私は、似たような疑問があることを知っています。

EDIT:私の根本的な目的を解決するために、質問の完全な構造を編集して変更しました。この編集の時点までに回答がないので、問題ではありません。

+0

あなたのミニムターゲットは? – Opiatefuchs

+0

minSdkVersion 19 targetSdkVersion 25.これはカスタムスイッチにどのように関連しているのかインフレーションエラー –

+0

API14で追加されているので質問しています... – Opiatefuchs

答えて

0

この問題はオンラインでいくつかの回答があります。 これには、SwitchCompat、CompundButtonなどを拡張したカスタムスイッチの作成が含まれます。方法はSilentlySetCheckedである。

OnCheckedChangeListenerの代わりに、OnClickListenerを実装すると、警告ダイアログの問題の再帰はありません。しかし、このリスナーのスワイプの変更は検出できません。

CompoundButton.OnCheckedChangeListener downloadButtonListener = new CompoundButton.OnCheckedChangeListener() { 
 
@Override 
 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
 
if (holder.downloadSwitch.isPressed() & isChecked) { 
 
//if switch is turned on by click/swipe 
 
} 
 
else if(holder.downloadSwitch.isPressed() & !isChecked{ 
 
//if switch is turned on by click/swipe 
 
} 
 
} 
 
});

これは、問題を解決し、単純な十分な解決策である:

は単純に、我々は、再帰問題なくスワイプ/クリックすることによって行わ状態変化を検出する必要があります。しかし、それは部分的にhereを除いて検索では決して出てこなかった。私が欠けているより良い解決策があるかどうかを教えてください。

:編集した質問にも答えるので、これを解決策として投稿しました。私は解決策として自分自身を受け入れる前に、より良い答えのために数日間待つでしょう。

関連する問題