アンドロイドのView
からリスナーを削除する方法はありますか?私はを持っています。それにはCheckChangedListener
が添付されています。問題は、setChecked()
を呼び出すとリスナーが起動するということです。アンドロイドのビューからリスナーを削除する
リスナーを削除できない場合は、setChecked()
を手動で呼び出すときとリスナーからタッチイベントをチェックするときに、リスナーが発砲しないようにする方法がありますか?
アンドロイドのView
からリスナーを削除する方法はありますか?私はを持っています。それにはCheckChangedListener
が添付されています。問題は、setChecked()
を呼び出すとリスナーが起動するということです。アンドロイドのビューからリスナーを削除する
リスナーを削除できない場合は、setChecked()
を手動で呼び出すときとリスナーからタッチイベントをチェックするときに、リスナーが発砲しないようにする方法がありますか?
まあ、私は答えを見つけました。これはどこにでも書かれているようですが、View
クラスのコードを調べて、nullをsetClickListenerメソッドに渡すとリスナーが削除されます。
checkbox.setOnCheckChangedListener(null);
これは任意のイベントリスナーで有効です。
setChecked()
を呼び出す前にリスナーを設定してから、有効なものを後で戻すことができます。
なぜcheckChangeListener
を手に入れましたか? onClicklListener
を使用する場合は、あなたのために機能するかもしれませんか?
あなたはちょうどremoveListener(this)を使用します。私はここに何かを逃していますか
Viewクラスには "removeListener"メソッドがありません... – Falmarri
Spinnerビューでも同様の問題がありました。私の解決策は、OnItemSelected
メソッドでチェックするクラスメンバー変数を作成することでした。 Spinnerの内容/選択をプログラムで変更する前に、この変数をtrue
に設定しました。 OnItemSelected
が起動すると、変数がtrue
の場合、私はfalse
に変更し、何もせずにただreturn
に変更します。欠点は、この変数がコード全体に渡って設定されるため、トラブルシューティングが難しいことです。
IDは、文書化されていない機能を使用することに慎重であり、いつでも変更することができます。 –
私はこれを「文書化されていない機能」とは厳密には呼んでいません。ビューが特定の型の単一のリスナーをサポートしていて、その1つのリスナーをnullに設定した場合は、ほかに何が起こると思いますか? :) – adamp
これは文書化されていない機能ではありません。ヌルを渡すのが安全だと書かれています。ビューが使用する内部リスナーは、構築時にnullとして開始され、イベントをディスパッチするかどうかを決定するときにnullと照合されます。 nullを設定すると、リスナーを設定する前の値にリセットされます。 – Falmarri