降りつぶし.net~同期するWebアプリ・スマホアプリの開発・運用~

第6回(最終回) Android用アプリケーション「降りつぶしroid」の開発

この記事を読むのに必要な時間:およそ 7 分

実装のポイント4~バックキー処理とフラグメント

Android特有の,⁠前の画面に戻る」操作を実行するのがバックキーです。通常,その処理はシステムが行ってくれます。

フラグメントによる画面の世界では,フラグメントの切り換えは「フラグメントトランザクション」で行います。フラグメントの付け替え・追加・削除などの処理を,トランザクションとして登録すると,その後バックキーが押されたところで,トランザクションの内容の「逆」を自動的に実行します。

図14 フラグメントトランザクション

図14 フラグメントトランザクション

しかし降りつぶしroidにおいては,このままだと問題が起こります。同期画面です。

同期画面でログインを実行している途中で,ログインをやめたくなったとします。しかしログインの実行はウェブビュー内のHTMLで行われているため,その中からキャンセルを行うことはできません。そのため降りつぶしroidでは,バックキーでキャンセルとしています。もちろん,初期画面の状態でバックキーが押された場合は,前の画面に戻る通常の動作です。また,ログインの実行中に別の画面を表示し,そこからバックキーで戻ってきた場合は,ログイン画面ではなく初期画面を表示します。これらはさほど不自然でないUI操作だと考えています。

これらを実現するためには,バックキーを同期画面フラグメントが乗っ取らねばなりません。

ただ,アクティビティにはバックキーを横取りする仕組みが正式に用意されていますが,フラグメントにはそれは存在しないのです。

そこで,実際の横取りはアクティビティが行うこととして,同期画面フラグメントがその横取りの依頼と通知をアクティビティに行うこととしました。フラグメントは専用のリスナインターフェースを実装し,表示される寸前のonResumeで自分自身をアクティビティに登録し,表示終了直後のonPauseでアクティビティへの登録を削除します。アクティビティは複数フラグメントへの対応として登録をコレクションで管理し,onBackPressedで登録されているリスナを順に呼び出し,いずれかでバックキーが処理された場合はそこで処理を中断,いずれでも処理されなかった場合はデフォルトのバックキーの処理をシステムに行わせます。

実装のポイント5~Android Maps V2のアニメーション問題

初代に比べてまったく別物となったAndroid Maps V2ですが,描画をOpenGLで行っているらしく,地図画面の遷移にアニメーションを用いると,表示が乱れます。

地図画面に対して横のスライドイン・アウトアニメーションを実行

削除時は,地図部分のみが上に少しだけスライドアウトした後フェードアウトし,その後,ボタンなどのみが指定どおり左にスライドアウトします。また再登場時は,ボタンなどのみが指定どおり左からスライドインし,その後地図部分がフェードインで表示されます。ボタンと地図のアニメーションが一致しないのはかなり違和感があります。

いろいろな解決策を試みましたが,結局,他のフラグメントを表示する際,地図画面にアニメーションを設定しない,という消極的な策で逃げています。

そしてこの策により,全体への影響も出ました。駅情報画面もフラグメントですが,これは地図の吹き出しのタップで表示される場合と,一覧表示の駅項目のタップで表示される場合があります。そして後者については,リストビューの項目の右端に「>」を表示しており,駅情報画面は右からスライドインしてきます。ただ,これを地図の吹き出しタップに適用すると,⁠画面真っ黒→右から駅情報画面がスライドイン」となり,なんとも間の抜けたビジュアルになってしまうのです。

これについては,両者でアニメーションを分けることにしました。一覧からは従来通りの右スライドインとし,吹き出しからの場合はフェードインとしています。

おわりに

これまで6回にわたり,降りつぶしを管理するソリューションの紹介をさせていただきました。

ニッチすぎる用途のアプリケーション群ですが,ごく一部の鉄道マニアからはご評価もいただけましたし,また筆者にとっても,自身の記録管理に大いに役立つのみならず,その設計・実装・運用を通じて,スキルアップもできたと感じています。

降りつぶしという趣味が「知力体力時の運」のすべてを要求されているのと同じく,降りつぶし.netでも,データベースの整備,3言語での開発,同期機能など,総合的なスキルが必要でした。

つたない連載でしたが,なんらかのアプリを個人的に開発・運用するための一助となれば幸いです。

ミニコラム・ついに全駅乗下車達成,でも生涯現役

このコラムも今回が最終回。それに合わせたわけではなく偶然なのですが,去る2013年11月4日,京都府にある山陰本線丹波口駅に降りて,全国の鉄道駅9,571駅すべての乗下車を達成しました。

京都駅の隣という,行きづらいわけでもないし駅舎や周辺に特筆性があるわけでもない駅をフィナーレに選んだわけですが,これには理由があります。京都にIT開発にも鉄道にも関係ない友人が住んでおり,おいしいお好み焼き屋さんにいつも連れて行ってもらっています。そして以前そこで「全駅乗下車達成したらここで打ち上げをします」と宣言してしまい,そこから遠くなくまだ降りてない駅として,そのまま最後まで残しておいたのでした。

果たして,その打ち上げでは,むしろ鉄道趣味にあまり関心のないみなさんに歓迎していただき,感慨もひとしおでした。

さて,いったんコンプリートとなり,筆者自身の記録管理のために開発をはじめたこの降りつぶし.net,もう筆者自身がエンドユーザとして活用することはなくなるのか,と言えば,決してそんなことはありません。

実はこの翌月,2013年12月には,新駅が3駅も開業します。富山地方鉄道の新相ノ木駅(富山県・日付未定⁠⁠,ことでんの綾川駅(香川県・15日⁠⁠,阪急の西山天王山駅(京都府・21日)です。もちろん,これらの駅が開業した瞬間,筆者の「全駅乗下車済」という記録はリセットされます。冬の青春18きっぷで,行かねばなりません。

今後も,日本の鉄道に新駅が誕生することは,止まることはないでしょう。つまり降りつぶしは,生涯現役の趣味,いや,ライフワークなのです。

筆者の実践と,もちろん降りつぶし.netの運用は,これからも続きます。

もっとも,新駅が一気に数十駅も開業することはないでしょうから,これまでのような,平日に休みをとらないと遠征できない,という社会人に厳しい状況はもうなくなります。つまり,⁠非常識な趣味」から「常識的な趣味」に変わることにはなります。⁠普通の人には戻れない,でも普通の鉄道趣味人に戻ります」と言ったところでしょうか。

図A 丹波口駅改札口から出場し全国全駅乗下車を達成し,改札口で「下車代印」という特殊な印をもらう/京都のお好み焼き屋さんでの記念ケーキ

図A 丹波口駅改札口から出場し全国全駅乗下車を達成し,改札口で「下車代印」という特殊な印をもらう/京都のお好み焼き屋さんでの記念ケーキ

著者プロフィール

よねざわいずみ

合資会社ダブルエスエフ代表社員。学習塾講師やら芸能ライターやら劇団主宰やらいろいろ経て現在はよろず請負プログラマ。最近の開発はPHP,JavaScript,Java,MTプラグインなど。お仕事随時募集中。

Twitter:@yonezawaizumi

鉄道旅行ブログ:http://feelfine.blog.izumichan.com/