Excite Smartphone Engineer's Blog

2012年 10月 12日

Titanium実装ノウハウの2

こんにちは。
ExciteのTitanium担当まえだです。
前回の続きです。





2. AndroidでTab内WindowのFocus Eventが取れない!?w
普通は下記のようにWindowにFocusイベントをつけてあげれば取得できます。
win.addEventListener('focus', function(e) {
// do something
});

最初は自分もこれでルンルンでした。
が、Titanium様が私めに試練を与えてくれたのです。突然イベントが取れなく。。。
それは以下の様な場合。
クリップ画面では、フォーカスが合うたびにDBにアクセスし更新処理を行なっています。
なので、「一覧画面→クリップ画面」ではイベントが取得できます。

e0291676_197220.png


ですが、、、、、、、、、、「一覧画面→詳細画面→クリップ画面」では、イベントが取れません。
しかもAndroidの時のみ。。。

e0291676_1913149.png


なので、これも自前実装!
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で実装すると文字が小さすぎます。
しかも、背景色こんなのやだー。

e0291676_19322214.png


じゃあカスタムして、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';


e0291676_19322214.png


変化なし。。。。ガーン。(画像は使い回しw)
じゃあじゃあ、LabelをSectionに突っ込めばいいんじゃ!
var label = Ti.UI.createLabel(labelStyle);
var section = Ti.UI.createTableViewSection({
headerView: label
});


e0291676_19331790.png



やたー!!!!!できんじゃん!!
で開放されたと思ってました。
ここでまたもやTitanium様は私めに試練をお与えになられたのです。


e0291676_19333585.png

あれ?飲食店とマリン・ダイビングが逆……?orz


e0291676_19335075.png

↑これ正解!


あれ、、、、、、、
本来ならエリア別とかカテゴリが名前違いで出るはずなのに、、、、、、同じのが!?
となったのです。
Section作成前にLogをとってみると、正しい値

ん?

色々色々色やりましたが、結局ダメ。
なので、楽するのは止めてSectionライクなRowを作って実装してます。
SectionライクなRowにはisSection:trueと、フラグをつけました。

e0291676_1937575.png


はぁ。ここに悩んで朝3時まで実装してたなぁww
と、Androidの標準ではSectionという考えがないので、後から考えればfmfmと思うのでした。


まとめ的なもの。
TitaniumでAndroidは良い試練になる!!頭の運動。
「おっ!いいんじゃね」って思った時にTitanium様が試練を与えてくださります。
でも、この辺のノウハウを貯めてUtilクラスとかを充実させていくのです。
そのうち公開できる範囲で公開したいと思います!!!


あ、スライドにも書きましたが
CoffeeScriptすっごくいいYO!

2012/11/06追記
2012/10/31日にHatch Upさん主催の勉強会で発表をしてきました。
(前回の資料とブログをまとめただけの資料ですが)公開しました。
【Techbuzz】titanium資料 from Youhei Maeda


by sp_tech | 2012-10-12 13:39 | Titanium | Comments(0)


<< エキサイトブログでのコードシン...      Titanium実装ノウハウの1 >>