Androidはどのように何度もクリックするイベントを防止しますか?
2528 ワード
問題の説明
おそらく皆さんはこのような問題に遭遇します。一つのクリックイベントが何度も触発されて、同じ内容が何度も提出されました。あるいは複数のページが…
オンクレック事件はAndroid開発において最も一般的なイベントです。例えば、submitButtonの機能はクリックした後に注文書を提出するので、普通コードは次の通りです。submitOrder関数は次のページにジャンプして処理します。
一般的に、この現象に遭遇すると、まず思い浮かべるのはクリック後にsubmit Buttonをクリック不可に設定することです。
シナリオ
NoDouble ClickListenerをカスタマイズして、OClikListenerから継承します。
簡単です。コードを見てください。
ONDouble Clickを利用して、ONClickの代わりに具体的な操作を行います。ONClickの方法で判断を加えます。クリックイベントを受信した後、時間を判断してください。前回の処理操作からMIN_uが足りないなら、時間を判断してください。CLICKDELAY_TIMEは、誤操作を防止するための連続クリックによる重複イベントを無視します。
MIN_CLICKDELAY_TIME調整可能です。
優勢
利点は、既存のコードの論理を変更する必要はありませんが、2つの代替が必要です。NoDobleClikListenerはOClickListenerの代わりに、OnClickの代わりに、ONNoDouble Clickが必要です。コードの構造などを変える必要はありません。(*上のコード0とコード**3とを比較します。)バグの状態を変更することに関心がありません。これらの追加的な判断ロジックは、業務ロジックに注目すればいいです。簡潔で優雅です。
おそらく皆さんはこのような問題に遭遇します。一つのクリックイベントが何度も触発されて、同じ内容が何度も提出されました。あるいは複数のページが…
オンクレック事件はAndroid開発において最も一般的なイベントです。例えば、submitButtonの機能はクリックした後に注文書を提出するので、普通コードは次の通りです。submitOrder関数は次のページにジャンプして処理します。
<code class="hljs" java=""> // 0
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
submitOrder();
}
}); </code>
このコードは通常は大丈夫ですが、Androidの機種性能などは千差万別で、比較カードの携帯電話に触れると、submitOrder()関数ジャンプページが遅延する可能性があります。このような現象に遭遇すると、ユーザーはもう一度クリックすることができ、関数が二回呼び出され、注文を繰り返すバグが発生する可能性が高いです。一般的に、この現象に遭遇すると、まず思い浮かべるのはクリック後にsubmit Buttonをクリック不可に設定することです。
<code class="hljs" cs=""> // 1
submitButton.setClickable(false);
//
submitButton.setEnabled(false); </code>
この方法も確かに有効ですが、submitOrder()の方法が成功していない場合、再度注文書を提出する必要があります。時又はsubmitButtonをクリック可能な状態に設定してください。似たようなbuttonが多いと、ややこしく混乱します。シナリオ
NoDouble ClickListenerをカスタマイズして、OClikListenerから継承します。
<code class="hljs" java=""> // 2
public abstract class NoDoubleClickListener implements OnClickListener {
public static final int MIN_CLICK_DELAY_TIME = 1000;
private long lastClickTime = 0;
@Override
public void onClick(View v) {
long currentTime = Calendar.getInstance().getTimeInMillis();
if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
lastClickTime = currentTime;
onNoDoubleClick(v);
}
}
}</code>
使用方法――submitButtonにクリックイベントを設定する時、OnClikListenerの代わりにNoDouble ClickListenerを使って、そして方法one NoDouble ClickをオンClickの代わりに設定すればいいです。このように:
<code class="hljs" java=""> // 3
submitButton.setOnClickListener(new NoDoubleClickListener() {
@Override
public void onNoDoubleClick(View v) {
submitOrder();
}
}); </code>
原理:簡単です。コードを見てください。
ONDouble Clickを利用して、ONClickの代わりに具体的な操作を行います。ONClickの方法で判断を加えます。クリックイベントを受信した後、時間を判断してください。前回の処理操作からMIN_uが足りないなら、時間を判断してください。CLICKDELAY_TIMEは、誤操作を防止するための連続クリックによる重複イベントを無視します。
MIN_CLICKDELAY_TIME調整可能です。
優勢
利点は、既存のコードの論理を変更する必要はありませんが、2つの代替が必要です。NoDobleClikListenerはOClickListenerの代わりに、OnClickの代わりに、ONNoDouble Clickが必要です。コードの構造などを変える必要はありません。(*上のコード0とコード**3とを比較します。)バグの状態を変更することに関心がありません。これらの追加的な判断ロジックは、業務ロジックに注目すればいいです。簡潔で優雅です。