AndroidでView
からリスナーを削除する方法はありますか? Checkbox
を付けたCheckChangedListener
を持っています。問題は、setChecked()
を呼び出すと、リスナーが起動することです。
リスナーを単に削除できない場合、setChecked()
を手動で呼び出すときにリスナーが起動するのを防ぐ方法はありますか?
さて、私は答えを見つけました。これはどこにも文書化されていないようですが、View
クラスのコードを調べたところ、setClickListenerメソッドにnullを渡すと、リスナーが削除されます。
checkbox.setOnCheckChangedListener(null);
これは、すべてのイベントリスナーで機能します。
なぜcheckChangeListener
を手に入れたのですか? onClicklListener
を使用するのであれば、うまくいくかもしれません。
setChecked()
を呼び出す前に何もしないリスナーにリスナーを設定し、後で有用なリスナーを戻すこともできます。
スピナービューでも同様の問題が発生しました。私の解決策は、OnItemSelected
メソッドでチェックするクラスメンバー変数を作成することでした。プログラムでSpinnerの内容/選択を変更する前に、この変数をtrue
に設定します。 OnItemSelected
が発生したときに、変数がtrue
の場合は、false
に変更し、何もせずにreturn
に変更します。これの欠点は、この変数がコード全体で設定されるため、トラブルシューティングが困難になることです。