【Androidアプリ開発】Fragmentの簡単な使い方

Fragmentとは何か

Fragmentとは、簡単にいうと、
「Activityの部品」です。

Androidアプリは、Activityという部品を組み合わせて成り立っています。

Activityとは、Webサイトで言えばページ一つ一つのようなものですが、
Activityには、Webページと異なり、「ライフサイクル」があり、
ユーザーの操作などに応じて、管理しなければならないことが多くあります。

Fragmentを使用せず、Activityのみでもアプリを作ることはできますが、
複雑なActivityに必要な部品の全部を詰め込むのでは、
なかなか管理が大変です。

そこで、Fragmentを使用します。

FragmentはActivityの部品ですから、
一度Fragmentを作ってしまえば、後はActivityからそれを呼び出すだけ。

複数のActivityで同一のFragmentを使いまわす事もできます。

もちろん、見た目の部品を作れるだけではなく、
Fragmentという部品は、それ自体で機能を持つこともできます。

機能AはFragmentAに、機能BはFragmentBに置いておき、
ActivityではAとBを呼び出すだけ、としたほうが、
Activityに機能ABを詰め込むよりもわかりやすく、管理しやすいですよね?

 

Fragmentを実装する方法

①Fragmentのレイアウトを作る

FragmentはActivityの部品ですから、レイアウトを持つことができます。
(もちろん、持たないこともできます)

Activityから複数のFragmentを呼び出して、
レイアウトを組み合わせる事ができるわけですね。

app→res→layout に、
通常のActivityのlayoutと同じように、レイアウトXMLを作成します。

ここで作成するレイアウトXMLでは、Activityのレイアウトと全く同じように、
RelativeLayoutで囲って、中にTextViewを入れて~と作っていくことができます。

ただし、ここで注意しなければならないのは、
ここで作っているレイアウトは、Activity中でそのFragmentが呼び出される部分だけの
レイアウトである、ということです。

Activityのレイアウトのように、画面全部と考えてはいけません。

②Fragmentクラスを作成する

Fragmentのレイアウトができたら、
それを適用し、さらにその部分の機能を制御するFragmentクラスを作成します。

public class FragmentClass extends Fragment {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_layout, null);
    }

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

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    }
}

Activityで見たような、on~のメソッドがオーバーライドされています。
Fragmentにも、ライフサイクルがあるのです。

onCreateViewのreturnの第1引数で、①で作ったレイアウトを指定します。

後はActivityと同じように、
このFragmentクラスに機能を実装していきます。

③Activityに、Fragmentを表示させる場所を作る

Fragmentは、Activityの部品です。
このままでは、Fragmentという部品をActivityのどこに表示させたら良いのか
決まっていませんので、これを決めます。

<LinearLayout
	android:id="@+id/fragmentContainer"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_alignParentBottom="true"
	android:layout_alignParentRight="true"
	android:layout_alignParentEnd="true"
	android:layout_marginBottom="10dp"
	android:layout_marginRight="10dp"
	android:orientation="horizontal"></LinearLayout>

これは、非常に簡単です。

ActivityのレイアウトXMLの中に、LinearLayoutやRelativeLayoutで作られた「ワク」を用意するだけです。

FragmentのレイアウトXMLの内容が、この「ワク」の中に表示されますので、
Activityの中のどこにFragmentを表示させたいか考えて、
ActivityのレイアウトXMLを編集してください。

④ActivityからFragmentを呼び出す

さて、Fragmentという部品のレイアウトもできた、機能もできた。
Fragmentを表示させる「ワク」も、Activity上に用意できた。

となれば後は、
実際にActivityからFragmentを呼び出すだけです。

FragmentClass myFragment = new FragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, myFragment);
transaction.addToBackStack(null);
transaction.commit();

Fragmentのインスタンスを作成

FragmentTransactionを取得

FragmentTransactionに、Activityに用意した「ワク」と、Fragmentを関連付ける

FragmentTransactionをコミット

といった感じです。

3行目で、Activityに用意した「ワク」と、Fragmentを関連付けているのを見逃さないように。
これで、ActivityとFragmentがドッキングします。

 

以上で、Activityの部品であるFragmentを使用することができるようになりました。

部品を別に作っておけば、
わかりやすく使いまわしもできて便利ですよね!

 

コメントを残す

メールアドレスが公開されることはありません。