目次
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を使用することができるようになりました。
部品を別に作っておけば、
わかりやすく使いまわしもできて便利ですよね!
コメントを残す