List View を所持するWidgetでは、List View に備わっている On Item Clicked
イベントを呼び出すことが可能です。ですが、この機能が動かないことがあったので原因を調べてみました。
原因:EntryWidget内にButtonを配置している
List View は、Listの子要素を Entry Widget クラスとして指定する必要がありますが、このEntry Widget 内にButtonを配置したとします。
すると、List View の On Item Clicked
イベントは呼ばれません。
解決策
Entry Widget 内に配置したButtonのVisibilityを変更すれば解決します。
それか、いっそButtonを使わないという方法でも解決します。
List Viewという機能自体がEntry Widgetにアクセスしにくい?
ListViewの子要素であるEntry Widgetをクリックした時にEntry Widget の見た目を変えたいと思ったとします。
ListViewのOn Item Clicked
を使ってEntry Widget側へアクセスできると思いきやできません。
引数はItem
なので、EntryWidgetへの参照ではありません。引数のItem
は、ListViewにAddItemで渡したクラス、EntryWidgetへ渡したデータになります。EntryWidgetが側だけなら、Item
はその中身です。
List View の On Item Clicked を使ってEntry Widgetの見た目をどうこうしたい場合など、Itemクラスにクリック判定用のイベントディスパッチャーを用意したりといった工夫が必要になるかもしれません。 List Viewがクリックを察知し、クリックされたEntry Widget にセットされたItemクラスのイベントディスパッチャーを呼び出します。 Entry Widget側では、Itemクラスのイベントディスパッチャーにイベントをバインドしているので、Itemクラスのイベントディスパッチャーが呼ばれた際に、通知が来るようになっています。