Fragmentを勉強する - part1
今回はAndroid 3.0で追加されたFragmentに関してです。
2回位に分けてここの要点をまとめたいと思います。
Fragment
-
- 複数のFragmentを一つのActivity内で表示する事が出来る
- 複数のActivityでFragmentを共有する事が出来る
- FragmentのLifecycleはActivityのLifecycleに影響される
- FragmentのTransactionはStackに保存されBack keyで戻ることが出来る
- FragmentはActivityで使用されるViewGroupに組み込まれる
- xmlで定義する際は
要素として定義する - fragmentをUI上に表示する必要はない(Backgroundで作業をさせる)
Fragment Design Philosophy
複数のScreen sizeでそれぞれ適したUIを
Creating a Fragment
-
- Activityと同じようなLife cycle。少なくとも下記のcallback methodを実装する必要がある
- onCreate()
- onCreateView()
- 初めてUIをdrawする際に呼ばれる。fragmentのrootとなるViewを返す必要がある。UIを持たない場合はViewを返す必要がない
- onPause
- Fragmentのsub class
- DiaglogFragment
- ListFragment
- PreferenceFragment
- Activityと同じようなLife cycle。少なくとも下記のcallback methodを実装する必要がある
Adding a user interface
UIにFragmentを追加するにはonCreateView()でActivityのlayout(ViewGroup)に追加されるViewを返す
public static class ExampleFragment extends Fragment { //第2引数のViewGroupにreturnするViewが追加される @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 第3引数のbooleanは"container"にreturnするViewを追加するかどうか //trueにすると最終的なlayoutに再度、同じView groupが表示されてしまうのでfalseでOKらしい return inflater.inflate(R.layout.example_fragment, container, false); } }
Adding a fragment to an Activity
ActivityにFragmentを追加する
1. Activityのlayout xmlに定義
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.news.ArticleListFragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
FragmentにはSystemやProgrammerが識別する為のidもしくはtagが必要である
2. Source内で追加
FragmentTransaction objectを取得
FragmentManager fragmentManager = getFragmentManager() FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentTransaction#add()でfragmentをActivityのViewGroupに追加
//Fragmentをinstance化 ExampleFragment fragment = new ExampleFragment(); //FragmentTransaction#add()で第1引数のlayoutにfragmentを追加 fragmentTransaction.add(R.id.fragment_container, fragment); //変更をcommit fragmentTransaction.commit();
Adding a Fragment without a UI
-
- FragmentTransaction#add(Fragment, String)でFragmentを追加
- UIを持たないのでonCreateView()を実装する必要がない
- FragmentManager#findFragmentByTag()でFragmentを取得する(tagを定義しないとUIを持たないFragmentを取得する方法がなくなる)
1回目はまずはここまで。
HashTag #Android, #Fragment, #FragmentManager, #FragmentTransaction, #Activity