Fragmentを利用してより良いUIを開発することができる

FragmentはAndroid 3.0(API Level 11)から利用が可能になりました。FragmentはActivityのロジックとUIを分ける上で非常に便利なAPIです。Fragmentを利用することで、Activity内で煩雑な画面サイズ対応をする必要がなくなります。例えば、タブレット端末とスマートフォン端末で表示を切り替えたい時などにFragmentは非常に重宝します。

fragmentを利用したUI管理の仕方(画像はAndroid Developersより引用)

fragmentを利用したUI管理の仕方(画像はAndroid Developersより引用)


上記の画像では、タブレット端末ではActivityAにFragmentAとFragmentBを同時に表示させています。一方、スマートフォンではActivityAでリスト項目を選択するとActivityBに存在するFragmentBが起動します。

FragmentはActivityと似ている

fragmentのライフサイクル。(画像はAndroid Developersより引用)

fragmentのライフサイクル。Activityのライフサイクルと似ている。(画像はAndroid Developersより引用)

FragmentはActivityと同様に、ライフサイクルがあります。FragmentとActivityのクラスは非常に似た性質を持っていますので、すでにActivityのみで開発してしまっているアプリでも、Fragmentに簡単に移行させることもできます。

それでは今回はFragmentがどのように動くのかを簡易なおみくじを開発しながら見て行きましょう。

Fragmentのクラスを利用する

Fragmentの生成は、静的な方法と動的な方法があります。今回は静的な方法をご紹介いたします。動的な方法についてはこちらを参考にしてください(動的な方法では予めViewを用意して、それをFragmentに置き換える、という方法をとります)。

まず、Fragmentを継承したクラスを用意します。

 
public class OmikujiFragment extends Fragment{

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}

@Override
public void onPause() {
super.onPause();
}

@Override
public void onDestroyView() {
super.onDestroyView();
}

@Override
public void onDestroy() {
super.onDestroy();
}

}
以上で非常に簡単ですが、Fragmentとしては最低限の機能が完成しました。Activityを実装する場合とほぼ同じメソッドをオーバーライドすることができます。主に、onCreateViewメソッドにてFragmentが起動された際の動作をハンドリングしていきます。

また、onDestroyメソッド(Fragmentが終了した際に呼び出される)では利用したオブジェクトの破棄やガーベジコレクションを行うことで、アプリのメモリ使用量を削減することができます。