AndroidアプリのActivityとFragmentの違いや使い方を詳しく解説

Androidアプリを作り始めたけど画面の作り方がよく分からない、ActivityやFragmentがあるけど違いや使い分け方は分からない方はいるのではないでしょうか。今回は、画面の作り方やActivityとFragmentの違いについて詳しく解説していきます。

Androidアプリではレイアウトという仕組みを使って画面を作る

Androidアプリでは、レイアウトという仕組みを使ってアプリの画面にコンポーネントを配置して行くことができます。レイアウトファイルというものをGUIエディターかXMLで編集することができます。Layoutについては、以下の記事で詳しく解説しているので参考にしてみてください。

Androidアプリ開発で、欠かせない要素となっているのがレイアウトです。初心者にとってUIを設計したいけど、レイアウトのことやXMLのことがよく分からないことはありますよね。 今回は、レイアウトを使ってUIを作りながら、XMLを使った操作の仕方、コードから...

ActivityとFragmentを使って画面を作る

レイアウトは、Activityというコンポーネントをベースにして他のUIコンポーネントを配置していきます。似たようなコンポーネントにFragmentというものがありますが、Activityの上で動作するコンポーネントでマルチペインやタブなどを実装するときに活用できます。

ActivityとFragmentの違い

ActivityとFragmentは、どちらも似たようなライフサイクルを持っているので似たような印象がありますが全くの別物です。違いについて紹介していきます。

Activityの特徴

Activityは、全ての画面のベースになるコンポーネントです。アプリのライフサイクルに合わせてペインを生成・破棄されるようになっています。1つのペインを扱うのに向いているので、タブやマルチメインを実装する時はFragmentを利用することが多いです。また、Activityは持っている値をアクティビティの2つのライフサイクルを跨いで保持することができません。なので、そういった場合にもFragmentを利用することが多いです。

Fragmentの特徴

Fragmentの大きな特徴としては、複数のペインを持つことができることと複数のライフサイクルを跨いで値を保持できることです。Activityの上で動作するので、Activityのライフサイクルに合わせてペインを生成・破棄します。Activityと似たライフサイクルを持つので、アプリの状態に添ったUIの変更や更新なども行い易いです。値の保持機能もあるので、アプリの再起動や回転があっても次のライフサイクルに値を維持することができます。また、Activityとは異なりFragmentの中に親子関係を持つことができるので細かくペインを分けることができます。

今回は、以下のような画面を作っていきます。下のボタンを追加します。

1. Fragmentを継承したクラスを実装

まず、Fragmentを継承したクラスをKotlinで実装します。今回はシンプルな実装をしていきます。

    package com.example.sample_profile
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import androidx.fragment.app.Fragment
    
    class ProfileFragment: Fragment() {
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_main, container,false);
        }
    }

2. Fragmentのレイアウトを実装

次は、実装したFragment用のレイアウトを作ります。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/fragment_1"
            android:layout_width="match_parent"
            android:layout_height="50sp"
            android:background="#bcbcbc"
            android:orientation="vertical"
    		android:gravity="center">
    		
    	<Button
    		android:id="@+id/button_1"
    		android:text="Save"
    		android:layout_width="wrap_content"
    		android:layout_height="30sp"
    		android:textSize="20sp"
    		android:textColor="#666"
    		android:background="#fff"/>
    </LinearLayout>

実装すると以下のようになります。

3. ActivityにFragmentを組み込む

実装したFragmentをActivityに実装していきます。Fragmentは単体では表示できず、Activityに載せることで初めて表示できます。

アプリ開発におすすめの本

もっとAndroidアプリ開発に必要な知識を学びたいという人向けに、次の記事で参考になる本を紹介しています。初級〜中上級まで紹介しているので、ぜひ参考にしてみてください。