Android application development 第11章:Fragmentの導入とActivityとの連携

■ なぜFragmentが必要なのか?

最初に疑問に思うのは、「Activityだけじゃダメなの?」という点だと思います。
結論から言うと、UIの再利用性や柔軟なレイアウト対応を考えると、Fragment は非常に便利です。

▽ たとえばこんな場面:

  • スマホでは1画面に1つの情報、タブレットでは複数表示したい
  • 複数の画面で同じUI部品(地図やフォームなど)を使い回したい
  • 一部の画面だけ切り替えたい(画面全体ではなく一部だけ)

これらに対応するために、画面内に埋め込むことができる“ミニActivity”的なもの=Fragmentが導入されました。


■ Fragmentとは?

Fragment は「UI + ロジックのかたまり」で、Activityの中に組み込んで使うことを前提に設計されたクラスです。

  • 自分自身でライフサイクル(onCreate, onStartなど)を持つ
  • 独自のレイアウトファイルを持てる
  • Activityと連携して動作する

簡単に言えば、**“Activityの中に入れられる部品化された画面”**です。


■ 基本的な使い方の流れ

1. Fragment クラスを作る

public class SampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_sample, container, false);
    }
}

ここで fragment_sample.xml は、この Fragment 専用のレイアウトファイルです。


2. Activity に Fragment を埋め込む

方法①:XML にあらかじめ定義
<!-- activity_main.xml -->
<fragment
    android:name="com.example.SampleFragment"
    android:id="@+id/sampleFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
方法②:コードで動的に追加
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
SampleFragment fragment = new SampleFragment();
transaction.add(R.id.fragment_container, fragment);
transaction.commit();

こちらの方法は柔軟に切り替えたり、複数のFragmentを使い分けるのに適しています


■ ActivityとFragmentの連携(データのやりとり)

▽ Activity → Fragment にデータを渡す

Bundle bundle = new Bundle();
bundle.putString("message", "こんにちは!");
SampleFragment fragment = new SampleFragment();
fragment.setArguments(bundle);
// Fragment 側で受け取る
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle args = getArguments();
    if (args != null) {
        String msg = args.getString("message");
    }
}

▽ Fragment → Activity にイベントを伝える

Activity にインターフェースを定義してコールバックする方法が定番です。

// Fragment 側で定義
public interface OnFragmentInteractionListener {
    void onButtonClicked();
}
// Activity に実装させる
public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener {
    @Override
    public void onButtonClicked() {
        Log.d("MainActivity", "Fragmentのボタンが押された!");
    }
}

Fragment 側でこのリスナーを呼び出すことで、Activity に通知できます。

■ ライフサイクルの違いにも注意!

Fragment も Activity と同じようなライフサイクルメソッドを持っていますが、Activity に依存しているため、呼ばれるタイミングには違いがあります。

ActivityFragment
onCreate()onAttach()onCreate()
onStart()onCreateView()onStart()
onDestroy()onDestroyView()onDetach()

画面の再表示や切り替え時に、Fragmentが「ビューの生成・破棄」を頻繁に繰り返す点に注意です。


■ まとめ

特徴内容
FragmentとはActivityの中で使える再利用可能なUIパーツ
メリットUIの部品化、タブレット対応、柔軟な切り替え
連携方法Bundleで渡す/コールバックで通知する
注意点ライフサイクルのタイミングに慣れる必要あり

Fragmentは最初は少し複雑に見えますが、「ActivityとUIを分離することで部品化する」という目的が分かると、非常に強力な道具になります。

mh

Related Posts

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

■ ライフサイクルとは? Androidアプリでは、ユーザー…

Android application development 第10章:Bundleを使ったデータの受け渡し

Androidアプリでは、画面(Activity)間でデータ…

You Missed

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

  • 投稿者 mh
  • 5月 12, 2025
  • 4 views

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

  • 投稿者 mh
  • 5月 12, 2025
  • 5 views

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

  • 投稿者 mh
  • 5月 11, 2025
  • 19 views

Android application development 第11章:Fragmentの導入とActivityとの連携

  • 投稿者 mh
  • 5月 11, 2025
  • 20 views

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

  • 投稿者 mh
  • 5月 10, 2025
  • 23 views

Android application development 第10章:Bundleを使ったデータの受け渡し

  • 投稿者 mh
  • 5月 10, 2025
  • 23 views