こんにちは。
ExciteのTitanium担当まえだです。
前回の続きです。
2. AndroidでTab内WindowのFocus Eventが取れない!?w
普通は下記のようにWindowにFocusイベントをつけてあげれば取得できます。
win.addEventListener('focus', function(e) {
// do something
});
最初は自分もこれでルンルンでした。
が、Titanium様が私めに試練を与えてくれたのです。突然イベントが取れなく。。。
それは以下の様な場合。
クリップ画面では、フォーカスが合うたびにDBにアクセスし更新処理を行なっています。
なので、「一覧画面→クリップ画面」ではイベントが取得できます。
ですが、、、、、、、、、、「一覧画面→詳細画面→クリップ画面」では、イベントが取れません。
しかもAndroidの時のみ。。。
なので、これも自前実装!
WindowにFireEventをくっつけて、TabGroupのフォーカスイベントが走った時に、FireEventでイベントを起こす!
前回作ったTabGroupに追記します。
var clipWindow = Ti.UI.createWindow();
clipWindow.tag = 'clip';
Ti.App.addEventListener('clip:load', function(e) {
loadData();
});
……….
var tabGroup = Ti.UI.createTabGroup();
tabGroup.addEventListener('focus', function(e) {
var win;
tabGroup._activeTab = e.tab;
tabGroup._activeTabIndex = e.index;
if (tabGroup._activeTabIndex === -1) {
return;
}
Ti.API._activeTab = tabGroup._activeTab;
if ) _u.isAndroid()) {
Ti.App.fireEvent(tabGroup._activeTab.tag + ":load");
win = self._activeTab.window;
}
});
今回はWindowが複数ある想定で実装しているので、各Windowにtagというプロパティで識別子をつけています。
これでついにどんなFocusイベントも取れる様に。。。。
ここまで来るのに以外と時間を食ってしまいました。なにせ、iPhoneシミュレーターでずっとテストしていたので。
Androidのエミュレータ遅いんだもん。
3. AndroidでTableViewSectionは使うべからず。
そのままです。Androidの場合はTableViewRowをSectionっぽく実装するのが吉です。
何故かというと、SectionはAndroidで実装すると文字が小さすぎます。
しかも、背景色こんなのやだー。
じゃあカスタムして、Sectionのテキストサイズ大きくすればいいじゃん。
→できません。
SectionにFont指定するプロパティが無いんです。。。
http://docs.appcelerator.com/titanium/2.0/index.html#!/api/Titanium.UI.TableViewSection
しかも、背景色だけ変えようと思って↓を実装。
var section = Ti.UI.createTableViewSection({
headerTitle: _title
});
section.backgroundColor='red';
変化なし。。。。ガーン。(画像は使い回しw)
じゃあじゃあ、LabelをSectionに突っ込めばいいんじゃ!
var label = Ti.UI.createLabel(labelStyle);
var section = Ti.UI.createTableViewSection({
headerView: label
});
やたー!!!!!できんじゃん!!
で開放されたと思ってました。
ここでまたもやTitanium様は私めに試練をお与えになられたのです。
あれ?飲食店とマリン・ダイビングが逆……?orz
↑これ正解!
あれ、、、、、、、
本来ならエリア別とかカテゴリが名前違いで出るはずなのに、、、、、、同じのが!?
となったのです。
Section作成前にLogをとってみると、
正しい値。
ん?
色々色々色やりましたが、結局ダメ。
なので、楽するのは止めてSectionライクなRowを作って実装してます。
SectionライクなRowにはisSection:trueと、フラグをつけました。
はぁ。ここに悩んで朝3時まで実装してたなぁww
と、Androidの標準ではSectionという考えがないので、後から考えればfmfmと思うのでした。
まとめ的なもの。
TitaniumでAndroidは良い試練になる!!頭の運動。
「おっ!いいんじゃね」って思った時にTitanium様が試練を与えてくださります。
でも、この辺のノウハウを貯めてUtilクラスとかを充実させていくのです。
そのうち公開できる範囲で公開したいと思います!!!
あ、スライドにも書きましたが
CoffeeScriptすっごくいいYO!
2012/11/06追記
2012/10/31日にHatch Upさん主催の勉強会で発表をしてきました。
(前回の資料とブログをまとめただけの資料ですが)公開しました。