Category Archives: 数学・プログラミング

Android 初心者がフラグメントを使う話

Android アプリ開発の入門書を手に取ると、まず画面の作成に始まり、必要な部品を追加してメソッドを実装し、他の画面への遷移へと順に進む方針で書かれていることが一般的です。

そこでは基本的にアクティビティ (Activity) というコンポーネントを使用することを前提に話が進みます。

アクティビティは私のような初心者にも直感的に理解しやすく、書籍などの情報量も多いので、当然と言えば当然なのかもしれません。

一方で現在の Android アプリ開発では、入門書の例のようにアクティビティをふんだんに用いて実装を行うのではなく、より小さなフラグメント (Fragment) というコンポーネントを利用して、個々のアクティビティの役割を少なくする考えが主流になっています。


その背景にはアクティビティの役割が増えすぎて肥大化していたことや、異なる画面の大きさを持つ多くの機器への対応などが挙げられていますが、本題ではない上に長くなるので割愛します。

重要なことは、一般的な Android アプリ開発では多用されているフラグメントについて、アプリ開発の入門段階では使い方を知る術が限られていることです。

たとえインターネット上には豊富に情報があったとしても、知らないものは調べられないのです。




フラグメントを使用するとタブの切り替えによる画面表示の変更などを簡単に実装できます。

それどころか、入門書で作成しているサンプルアプリではアクティビティほど多用な機能は必要ない場合も多いので、フラグメントのみで画面遷移を実現できる場合も少なくありません。

フラグメントの簡単な使用方法はアクティビティ同様に、Java ファイルと XML ファイルを用意してアクティビティに追加してあげることです。

例えば Java ファイルを FooFragment.java として、その内容を以下のようにしてやれば、他に必要なことは2点のみです。

1点目はコード中の R.layout.fragment_foo で参照されている XML ファイル fragment_foo.xml を作成してあげること。

もう1点目は作成したフラグメントをアクティビティに追加してあげることです。

この時、追加するフラグメントの OnFragmentInteractionListener を実装してあげないと InflateException を吐いてアプリが落ちますので、忘れずに実装してください。

InflateException は他のエラーと同様に Android Monitor の logcat から確認できます。

これでうまくビルドに成功すれば、アプリの立ち上げ画面からフラグメントのレイアウトを表示するようになります。

レイアウトを切り替えるにはフラグメントから FragmentManager を利用します。

この時に忘れてはならないのは、追加されるアクティビティ (ここでは MainActivity) に追加するフラグメント (ここでは BarFragment) の OnFragmentInteractionListener を追加実装してあげることです。

このようにアクティビティと比較するとやや煩雑になってしまいますが、入門書で作成したサンプルアプリを使ってアクティビティからフラグメントを使用した構成に自分でコードを書き換えていくと、アプリ開発についての理解が深まって良い勉強になります。

そしてあまり入門書では触れられていない、FragmentTabHost を用いたタブの切り替えも簡単に行えるようになる点も見逃せません。

2冊目の参考書に『基本からしっかり身につく Android アプリ開発入門』を購入

『はじめてのAndroidプログラミング』の読了後に2冊目として『基本からしっかり身につくAndroidアプリ開発入門』 (以下、本書) を購入しました。

購入理由は Android 端末のストレージ操作とカメラ撮影を用いたアプリ開発について、短時間で効率的に学習したかったためです。

時間をいくらでも費やせるのであれば、自らソースコードを読み込んで学習しても良いのですが、時間を掛けずに体系的に知識を会得するには書籍を購入して自分で手を動かしながら検証した方が確実です。



基本からしっかり身につくAndroidアプリ開発入門 Android Studio 2.x対応 プロが本気で教えるアプリ作りの基本「技」 (ヤフー黒帯シリーズ)


本書はまさに2冊目に読む参考書として適当な内容で、ある程度のアプリ開発経験を持っていた方が内容が頭に入りやすいです。

というのも第1章でアプリ開発環境に触れた後は、アプリのコンポーネントとそのライフサイクル、リソースやパーミッションの話が始まります。

少しでもアプリ開発の経験があれば、なるほどと感心するところですが、前提知識を持たずに読むと何について解説しているのか具体的なイメージが思い浮かばずに混乱するかもしれません。

さらに付け加えると Java 言語の説明はありませんので、ソースコードを読み、何をしているのか理解できることが前提となります。

とりあえず動くアプリを開発したいという目的であれば、『はじめてのAndroidプログラミング 改訂版』を本書の先に読み、コンポーネントの名称や役割をアプリを動かしながら覚えた方が早いです。

前提知識があった方が望ましい反面、本書ではどの処理で何をすべきであり、何を避けるべきであるかが理由とともに述べられているところが本書の長所です。

具体的な開発経験からくる的確な助言が、処々に述べられており、この説明部分だけでも読むだけの価値があります。




短所はプログラムのソースコードが一部おかしかったり、( 紙面が足りなかったのか ) 本来は分けて説明すべき項目を一つの章にまとめているので、書籍やプログラムの構成が煩雑で分かりにくい部分が存在することです。

また出版時期の影響から現行の AndroidStudio Version 2.3 と ConstraintLayout に対応していません。

ソースコードがおかしい部分の一例としては、Chapter 3 の MainActivity.java クラス (pp.137) が挙げられます。

本書では以下のように View.OnClickListener をインプリメントしているのですが、これでは public void onTextChanged などの一部のメソッドをオーバーライドすることはできません。

仕方がないので、いつものごとくソースコードの内容を勝手に書き換えて対応します。

これが正解かどうかは分かりませんが、本書の説明どうりにアプリが起動するようになるのであれば、ソースコードを改変したところで大きな問題はないというのが私の方針です。

余談ですが、ソースコードの書き方には冗長に見える場面があったり (pp. 208)

と思いきや、その直後のページ (pp. 209) では余分な文字を省略したりという具合に書き方が安定しません。

もしかしたら、それぞれ別の人が書いたか、別の時期に書かれたソースコードなのではと思えてきます。

どうでも良い余談は置いておくとして、書籍やプログラムの構成が煩雑で分かりにくくなっていることが顕著なのは Chapter 4 です。

この章ではファイルの入出力とデータベースの利用とコンテントプロバイダの利用を行うクラスを実装しているのですが、どこまでが説明のための実装例で、どこまでがアプリを動かすための要素として必要なクラスなのかが分からずに混乱します。

見方を変えれば、具体的な実装例がいくつも提示されていてありがたいとも言えるのですが、改訂版では分かりやすく整理して頂けると私のような読者は助かります。

当然ながら本書一冊で Android 開発に求められる知識を網羅しているわけではありませんが、通読したことにより具体的な実装方法のみに留まらず、気を配るべき事項や実装中に注意すべき点などを学習することができたことは大きな収穫でした。

本書は Android アプリ開発の入門書を読み終えて、少しステップアップしたい私のような読者には役立つ書籍と言えそうです。