2015-10-17 8 views
11

私はButterKnifeの生成コードを見ていて、@OnClick注釈の場合、ライブラリによって実装されたDebouncingOnClickListenerを使用していることに気付きました。なぜButterKnifeは@OnClickメソッドにDebouncingOnClickListenerを使用するのですか?

要素を同じフレームに使用する(これは静的フラグを使用します)、複数のボタンをクリックしないようにするためです。実装hereを見ることができます。

私は、ライブラリで管理されているすべてのクリックイベントでこれを使用することに決めた理由を説明しようとしましたが、何も見つかりませんでした。

だから、なぜ彼らはそれを使用していますか? ButterKnifeのすべてのユーザーがこれを必要とする理由は何ですか? これを使用することを決めたユーザーであってはなりませんか? ビューバインディングがなぜこの「機能」を提供するのに役立つのか? 同じフレームで複数のクリックを受信したい場合はどうなりますか? ClickイベントにButterKnifeを使用することはできませんでした。

私は攻撃的なふりをしていない、ただ説明をしたい、多分私は何かを逃している。

+0

オープンソースライブラリです。それがあなたにそれほど気になるなら、私はプルの要求が歓迎されると確信しています。もしそうでなければ、いつでもそれをフォークすることができます。 – GreyBeardedGeek

答えて

5

は、なぜ彼らが決めたButterKnifeのすべてのユーザーがこれを必要とすること、それをカバー?

ボタンがあり、このボタンでクリックイベントが発生すると、新しいアクティビティが起動します。ユーザーが非常に迅速にボタンをタップすると、何が起こりますか?クリックリスナーが2回発砲される可能性があるため、2つのアクティビティが開始される可能性があります。

このDebouncingOnClickListenerは、それ以降のクリックリスナーは認識されないことを保証します。最初のクリックが発生するとすぐに、次のクリックは、が有効になる次のフレームまで無視されます。

ビューでアクションを実行すると、MessageQueueにイベントがポストされます。今、最初のクリックが発生すると、あなたはイベントをポストしています - 新しい活動を開始します。そして、すぐ次のフレームでクリックリスナを有効にする別のイベントをポストします。 2番目のイベントは、post()がキューに登録されているため、最初のイベントの後に発生することが保証されています。

同じフレームで複数のクリックを受信したい場合はどうなりますか?

あなたはタッチイベントとクリックイベントでないに興味があるので、あなたは、@OnTouchを使用する必要がありますよりも、あなたは、複数の後続のクリックイベントを受信することが許容されている場合。


(38:20から開始)Fragmented Podcast #88で場合について@Piwaiの明確化を聞きます。

+0

デフォルトのonClickListnerをこのように実装する必要があります。恥ずかしいGoogle – user1209216

0

短いストーリーは、タッチイベントが非同期であるためにバグが発生しないようにすることです。また、ライブラリーをバインディングに使用することもできますが、通常のクリックリスナーを割り当てることができます。

このPodcastエピソードはかなりよく Fragmented 088

+0

「タッチイベントは非同期」とはどういう意味ですか?どんな例ですか? – azizbekian

+0

これは、タッチイベントがメインイベントから処理されることを意味します。だから、あなたは注文物が処理されることが保証されていません – easycheese

+0

私はあなたが正当なポイントを持っていることを疑う。 – azizbekian

関連する問題