web-dev-qa-db-ja.com

androidのビューからリスナーを削除します

AndroidでViewからリスナーを削除する方法はありますか? Checkboxを付けたCheckChangedListenerを持っています。問題は、setChecked()を呼び出すと、リスナーが起動することです。

リスナーを単に削除できない場合、setChecked()を手動で呼び出すときにリスナーが起動するのを防ぐ方法はありますか?

30
Falmarri

さて、私は答えを見つけました。これはどこにも文書化されていないようですが、Viewクラスのコードを調べたところ、setClickListenerメソッドにnullを渡すと、リスナーが削除されます。

checkbox.setOnCheckChangedListener(null);

これは、すべてのイベントリスナーで機能します。

60
Falmarri

なぜcheckChangeListenerを手に入れたのですか? onClicklListenerを使用するのであれば、うまくいくかもしれません。

6
Nanne

setChecked()を呼び出す前に何もしないリスナーにリスナーを設定し、後で有用なリスナーを戻すこともできます。

2
Null Set

スピナービューでも同様の問題が発生しました。私の解決策は、OnItemSelectedメソッドでチェックするクラスメンバー変数を作成することでした。プログラムでSpinnerの内容/選択を変更する前に、この変数をtrueに設定します。 OnItemSelectedが発生したときに、変数がtrueの場合は、falseに変更し、何もせずにreturnに変更します。これの欠点は、この変数がコード全体で設定されるため、トラブルシューティングが困難になることです。

0
Mike Lowery