SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Android Studio 2で始めるアプリ開発入門

Androidアプリのフラグメント(1) ~一つのAndroidアプリでタブレットとスマホに対応~

Android Studio 2で始めるアプリ開発入門 第9回


サンプルプロジェクト作成

 では、今回使用するサンプルアプリを作成していきましょう。

プロジェクト情報

 以下が今回使用するサンプルアプリのプロジェクト情報です。

サンプルアプリのプロジェクト情報
Application name FragmentSample
Company Domain android.wings.websarva.com
Package name com.websarva.wings.android.fragmentsample
Project location C:\…任意のワークフォルダ…\FragmentSample
Phone and Tablet Minimum SDK API 15
Add an activity Empty Activity
Activity Name MenuListActivity
Layout Name activity_menu_list

フラグメントの追加

 まず、strings.xmlはダウンロードサンプルを参照してください。なお、ダウンロードサンプルは、次回の改造も含めたソースコードとなっているのでご了承ください。

 先述のとおり、フラグメントはxmlファイルとJavaクラスのセットで成り立っているので、リスト用のフラグメントのセットを追加します。Fileメニューから「New」-「Fragment」-「Fragment(Blank)」を選択してください。以下のようなウィザード画面が表示されます。

図4 Fragmentの追加画面
図4 Fragmentの追加画面

 以下の情報を入力し、「Finish」をクリックしてください。

ウィザード画面に入力する情報
Fragment Name MenuListFragment
Create layout XML? チェックを入れる
Fragment Layout Name fragment_menu_list
Include fragment factory methods? チェックをいれない
Include interface callbacks? チェックをいれない
Target Source Set main

 すると、所定の位置にMenuListFragmentクラスとfragment_menu_list.xmlファイルが追加されています。

 MenuListFragmentを見てください。クラス宣言のところが

public class MenuListFragment extends Fragment

となっています。フラグメントのJavaクラスは、その名のとおりFragmentクラスを継承して作ります。

フラグメントのライフサイクル

 フラグメントを導入すると、画面構成と処理は、そのほとんどをフラグメントに記述することになります。まず、IntentSampleのactivity_menu_list.xmlの内容をそのままfragment_menu_list.xmlにコピーしてください。

 次に、MenuListFragmentのonCreateView()メソッドに以下のソースコードを記述します(コンストラクタがあらかじめ記述されていますが、こちらは削除しても構いません)。

リスト1 MenuListFragmentにソースコードを追加
public class MenuListFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_menu_list, container, false);  // (1)
        ListView lvMenu = (ListView) view.findViewById(R.id.lvMenu);  // (2)
        
        return view;  // (3)
    }
}

 フラグメントは、画面の一部をブロック化したものなので、アクティビティ同様にライフサイクルを持っています。さらに、それらはアクティビティと連動します。これを図にすると、下図のようになります。

図5 フラグメントのライフサイクル
図5 フラグメントのライフサイクル

 この図を見て分かるとおり、リスト1でコードを記述したonCreateView()メソッドというのは、アクティビティのcreate()中の処理であり、フラグメントでは3番目に実行されるメソッドです。この段階で、このフラグメントが担当する画面構成が作られます。なので、まずしなければならない処理は、レイアウトxmlファイルから画面部品を生成することです。これがリスト1の(1)です。ここでは、onCreateView()メソッドの第1引数であるinflaterのメソッドinflate()を使って画面を生成します(infleteに関しては、前回のオプションメニューのところでも解説しています)。その際引数が3個必要です。

 第1引数は、生成するフラグメントのxmlファイルのR値を渡します。

 第2引数は、onCreateView()メソッドの第2引数containerを横流しします。

 第3引数は通常falseとします。これは、inflateした画面ブロックのルートを第2引数とするかしないかを指定する引数です。

 このinflate()メソッドの戻り値が、このフラグメント用の生成された画面ブロックなので、これをonCreateView()メソッドの最後にreturnします。これがリスト1の(3)です。

 もし、生成された画面ブロックに何か動的に手を加えたい場合は、このinflate()とreturnの間に処理を記述します。その際、ブロック内の画面部品を取得する必要が出てきますが、画面部品を取得するのにActivityのように、そのままfindViewById()と記述してもコンパイルエラーとなります。これは、FragmentクラスにfindViewById()メソッドがないのが原因です。代わりとして、いまinflateされた画面ブロックであるviewのfindViewById()を使用します。これがリスト1の(2)です。ここでは、メニューリストを表示するListViewを取得しています。

次のページ
コンテキスト

この記事は参考になりましたか?

Android Studio 2で始めるアプリ開発入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9595 2018/05/23 15:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー