Titanium.UI.ListViewのイベントまわりを調べてみた
ふと試してみたところ、Titanium.UI.ListViewのドキュメントに掲載されていない swipe
イベントが取れたので、もしかして他の使えるのかも?と思って調べてみました。
ドキュメントに掲載されているクリックイベント以外だと、スワイプと長押しあたりが使えると広がるな―などと思って始めたのですが、、、まあ結論を書くと、swipe
イベント自体は発行されるものの、個々のListItemのアクションとしては使えないものだったのでした。
ということを調べたメモです。
確認した環境
確認したこと
- ListSection/ListItemでイベントが取れるのか?
- どのイベントを受け取ることができるのか?
ListSection/ListItemでイベントが取れるのか?
そもそもListSectionやListItemでイベントは取れないのか?という点を念のため再確認。
それぞれに addEventListener
をしたところ not a function
になってしまったので、ここはやはりListViewでハンドリングするしかなさそう。
もう半分答えが出た感じ。
どのイベントを受け取ることができるのか?
公式ドキュメント上で特定のListItemを識別するようなイベント itemclick
のみですが、他のViewなどで持っているものでListItemへの操作をハンドリングできそうなイベントを見繕って調べてみました。
Alloyベースのプロジェクトを作って、思いついたイベントハンドラを片っ端から追加して、ポチポチさわってみた結果は以下のような感じ。
イベント | iOS | Android | 補足 |
---|---|---|---|
itemclick | ◯ | ◯ | - |
swipe | △ | △ | イベントは発生するが、 sectionIndex や itemIndex は取れない ※1 |
click | - | - | 発生しない |
singleclick | - | - | 発生しない |
dblclick | - | △ | Androidは、ListItemがない部分でのみ発生する |
longclick | - | - | 発生しない |
longpress | △ | △ | iOSは発生するが、 itemclick も発生する Androidは、ListItemがない部分でのみ発生する |
singletap | △ | △ | iOSは発生するが、 itemclick も発生する Androidは、ListItemがない部分でのみ発生する |
doubletap | - | - | 発生しない |
twofingertap | △ | △ | iOSは発生するが、 itemclick も発生する Androidは、ListItemがない部分でのみ発生する |
というわけで、やはりListViewで特定のListItemへの操作に対応するためのイベントは itemclick
だけ。要するに、ListViewのイベントということですね。
ちなみに、Androidで受け取れる itemclick
以外のイベントで sectionIndex
や itemIndex
が取れることがあったのですが、その操作以前にクリックしているListItemの情報が取れてしまっているだけで、その操作に対応した情報ではありませんでした(紛らわしい!)
まとめ
標準のListViewのみだと、凝った操作はできない印象。
他の方法としては、ItemTemplateにいろいろViewを設置して、そこでイベントハンドリングすれば取れそうな気もしますが、もともとやろうとしていることから外れているので、いったんここまで。
調べるのに作ったプロジェクトは これ 。
Appcelerator Titanium Smartphone App Development Cookbook - Second Edition
- 作者: Jason Kneen
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/11/30
- メディア: Kindle版
- この商品を含むブログを見る