家族ToDo(仮)開発日誌スマートフォン用の表示で見る家族ToDo(仮)開発日誌やりたいことや行きたい場所を家族で共有するためのAndoridアプリの開発日誌(兼Android開発学習メモ)です。この広告は、90日以上更新していないブログに表示しています。1.5hモデリング昨今はMVVMとか最近流行(再燃?)らしいが、フレームワークの高度なサポートがないと実装が面倒だという話をどこかで聞いたので、慣れたMVC(偽)な感じで作ろうと思う。ListViewにデータを表示すべく、データモデルを考える。このListViewにはToDoアイテムの一覧を表示したいので、ToDoアイテムのモデルを考える。こんな感じで良かろう。将来的にはToDoなのかToGoなのかToBuyなのかを区別できるようにしたいし、Ownerが誰かを示すuserなんかもほしいところだが、今日はListViewの動作を確認するのが目的なのでこの程度で良いだろう。modelパッケージを掘って、クラスを書く。Studioに感動してしまったのだが、コードエディタ上でCommand+Nを押すと小窓が現れてgetter/setterの自動生成なんかが簡単にできたりする。他にもコンストラクタ生成やメソッドのオーバーライドなんかもここからできる。これらが個別のショートカットキーで起動するわけではなく、すべてCommand+Nでいけるのが個人的にはすばらしい。困ったらとりあえずCommand+N押しとけ、みたいな。AndroidでDI上記で設計したToDoクラスを得るためのFactoryを作るのだが、とりあえずは適当なToDoを作って返すテスト用のFactoryを作っておき、後々Webから取得する本物のFactoryに差し替えたい。Mockとか使うと良さそうな案件だが正直よくしらんのでDIすることにする。Dagger最終的にデータはサーバサイドで管理するので、画面に表示するデータはサーバ側からAPI経由で取得させることになるが、とりあえずAndroidアプリを動かすところから始めたいので、適当にデータを供給するProviderとそれを生成するFactoryを作ろうと思う。適当なデータを返すProviderを使うようにしておき、あとでパラメータか設定ファイルかビルドオプションか何かでサーバ側からデータを取得するProviderに差し替えられるようにしたい。いうときはやっぱりDIしたくなるわけで、AndroidのDIコンテナについて適当に調べた。Guiceが有名のようだが、下記サイトによればDaggerのほうが全ての面において優れているとのことでこれを使うことにした。ライブラリのサイズが小さいようですばらしい。Library]を選べばよい。これでgradleの設定ファイルにエントリが追加され、ビルド時に参照されるようになる。上記だけだとビルド時にライブラリが足らんと怒られるので、javawriter-2.3.1.jarとjavax.inject.jarを入手して追加する必要があった。HostingちなみにDagger専用のAnnotationをコードエディタ上で補完できるようにするには、IntelliJ用のプラグインを使うと良いみたい。Inject対象のクラス)を、メソッドに@Providesを付与。}}で、Injectしたいフィールドに@Injectをつけておく。このときModuleクラスからアクセス可能な可視性である必要がある模様。privateだと怒られたのでControllerとModuleを同じパッケージに入れて、@Injectなフィールドはpackageレベルの可視性にした。toDoProvider;(略)}これでいい感じにインスタンスが挿入される。のちのち、Moduleクラスのprovideメソッドの中で外部設定ファイルを読み込み、インスタンス化するクラスを変更できるような仕掛けにしようと思うが、どうも泥臭い。なんかもっとすっきりできる方法があるのではないかと思うが、現時点では本質的でないので後回しにする。2hActivityを構成するファイルウィザードが頑張ってくれたおかげでとりあえず最小限の動くコードセットができた。これを書き換えて自分好みの画面を作っていきたい。Androidにおいて1つのActivityは2つのXML(activity_*.xmlとfragment_*.xml)と1つのクラス(*Activity.java)で構成されている模様。3.0からFragmentという概念が追加されたらしい。要は画面部品の再利用やデバイスに応じた切り替えをしたいがためのテンプレートエンジンのようなものなのだろう。試しにactivity_*.xmlの中を覗いてみるとほぼ空っぽで、FrameLayoutのみが定義されている。ここからfragment_*.xmlを参照しているのかと思いきやXMLに記述はなく、*Activityクラスにて処理としてfragment_*.xmlの内容を紐付けしている模様。画面の構成情報がコードに入ってしまっているように見えてなんか嫌だったのでFragmentに関する処理やXML中の記述を削除*1して、fragment_*.xmlを削除し、activity_*.xmlのみにして動くことまでは確認した。イベントハンドラやウィジェットのインスタンスの扱いが面倒そうなのでFragmentは使わずにいこうと思う。Studioのウィザードに画面を作らせると意地でもFragmentを使おうとしてくるのが鬱陶しいので画面は既存のレイアウトのコピペで作ることにした。Studioのように直感的に使用できる。ActivityのXMLをエディタペインに開き、Designタブに切り替えてPaletteペインからD&Dすればよい。ウィジェットを選択すればPropertiesペインでプロパティの編集ができる。デフォルトのRelativeLayoutを削除してLinearLayoutに変更する。その上にListViewを追加する。Designタブに切り替えると、適当なテキストが表示されたListViewが追加されたのを確認できる。ツールバーの三角アイコンを押して実行。Genymotion上でアプリが動くが、データが無いのでまっさらな表示のまま。何とかしてウィジェットにデータをバインドしてやらなければならない。*1:PlaceholderFragment内部クラスとonCreateのif文が該当箇所。7知らないのでちょっと調べたら、処理の終わりで確実にリソースをクローズしたい場合に使う模様。C#のusingみたいなもんか。{}}これが↓のように簡単に書けるとのこと。finally句のネストしたtry-catchが省略できて大変いい感じですね。ex.printStackTrace();}まあ、今回の開発では使えないんですけどね。StudioのインストールJavaの開発環境といえばeclipseだが、何から何まで細かく設定しないといけないし、バージョンによってはプラグインが動いたり動かなかったりで個人的には嫌い。Web開発にNetbeansを使っているのでそれでやろうかと思ったが、Google様謹製のIDEがあるとのことでそれを使うことにした。IDEAベースらしい。下記公式サイトからダウンロードしてインストール。DevelopersGenymotionのインストールとりあえず適当なプロジェクトを作ってまず動くところを見ようと思って空のプロジェクトを実行したら、標準のエミュレータがあまりに遅すぎて使い物にならない。SDKではx86ベースのエミュレータが使えるとのことで下記サイトを参考に試してみたが、うまく動かなかったのであきらめた。Blogさらに調べるとGenymotionというのが良いということでインストールしてみた。[キータ]要は各AndroidバージョンのVirtualBox用仮想マシンイメージを用意してくれていて、それをダウンロードして使えるVirtualBoxフロントエンド的ソフトであった。爆速!というほど速いわけではないが、十分使い物になるレベルになった。個人使用は無償だが、商用利用は有償のようなので仕事で使う際はライセンス契約が必要である点は頭の片隅に置いておくべし。スリープ復帰後にはGenymotion仮想マシンを再起動した方がいいかもあるとき原因不明のエラーが発生して困っていたのだけど、試しに純正エミュレータで動かしたら問題なく、もしやと思いGenymotion仮想マシンを再起動したら問題なくなった。問題を避けるために、スリープ前に仮想マシンを落とすようにし、復帰後に起動させるようにしたらその後は平穏である。Studioのウィザードで簡単にひな形を作ることができる。4.0以上なので無視。古いバージョンのAPIを勉強したくないので。SDK自分のスマホは4.2.xだが、奥さんのスマホが4.0.x系なので。Level6.0はサポートも切れていることだし7.0へ。SDKが19より下の場合、try-with-resourceが使えないとのこと。Activity1枚目の画面なのでチェックした。Name適切な名前に変更。ツールバーの三角ボタンを押すとビルドして起動。すると下記ダイアログが表示され、あらかじめ起動しておいたGenymotion仮想マシンがリストアップされているのでOKして起動。いうわけで見事起動した。何か新しいことを始めるとき、まず入門用の本を読むようにしている。Webの情報は調べ物には良いが、体系的にまとまっているものは少ないので。Androidの場合は公式ドキュメントが大変充実しているようだが、英語は読むのに時間が掛かるのでパス。基礎を身につけるために下記を買ってさらっと読んでポイントになりそうなところに付箋を貼っておいた。見るいま調べたら増補改訂版が出ている模様。今買うならこっちですね。見る下記も評判が良かったので買ってみたが、あまり読んでいない。見る2版も出ていたが、評判が悪かった(内容がだいぶ変わってしまった?)ような記憶がありわざわざ1版を買っている。詳しくは覚えていないので実は2版でもよかったのかもしれないが。あとは付箋部分を読み返したりWebで検索しつつ頑張る感じ。01:30Android開発の基礎知識を蓄えるために読んだ本Tweet広告を非表示にするもっと読むコメントを書く2014-01-01開発計画のような何か計画だいたい下記のような感じで作ろうと思う。調査時間やハマリ時間含めてだいたいカン。この時間くらいで何とかするぞ、という意思表示程度のものにすぎない。Web側は作り慣れているのでそこまで詰まらない見込み。単体テストの時間は含めていない。(40h)合計196hくらいで最低限の機能を実現。後に下記を作ってひとまずの完成とする。(16h)合計152h。いうわけで、1日平均60分くらいやれたとして、1年で約360人時、15人日というところでしょうか。1時間だと1年分って意外と少ないな・・。2年も3年もやってるとだらけるので何とかしたいところですね。家族で休日に行きたい場所について、思い立ったときにメモして共有できるツールがほしかったが、下記まとめで紹介されているようなToGo系というかWishList系のサービスはどれもソーシャルな感じで大げさでイマイチ。まとめというわけで、ちょうどAndroidアプリ開発の勉強もしたかったこともあり自分で作ることにした。コンセプトは下記の通り。簡単に詳細情報を取得可能とりあえずAndroidのみ。(APIのみの実装)。他の機能はなるべく委譲。GoogleカレンダーやToDoソフトへの連携。三日坊主にならないよう、わずかな進捗でも良いので極力毎日作業するようにしたい。00:00家族で行きたい場所、ほしいものを共有する「家族ToDo(仮)」Tweet広告を非表示にするもっと読むコメントを書くプロフィールid:ymknやりたいことや行きたい場所を家族で共有するためのアプリの開発日誌(兼Android開発学習)です。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。