Fragmentの作成
Fragmentを使った画面の作成は
FragmentActivityのサブクラスを作成してから
Fragmentの生成、追加をする
Fragmentは、Activityへ配置する部品で
複数のFragmentの配置ができる
Fragmentは自分自身のライフサイクルを持つため
イベント処理、Activityの実行中でも追加、削除が可能
Fragmentのライフサイクルは
Activityのライフサイクルと連動しているので
Activityが休止状態になると
Fragmentも休止状態になる
また、Activityが破棄されるとFragmentも破棄される
まずは、FragmentActivityのサブクラスの作成
public class Fragment extends FragmentActivity implements onClickListener{ }
次に、FragmentのレイアウトファイルをXMLで作成
<LinearLayout xmlns:android="http://schemes.android.com/apk/res/android" android:id="@+id/myfragment" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
次に、JavaでFragmentのためのサブクラスを作成する
これには、レイアウトファイルをロードして生成する
extends Fragment
でFragmentを使えるようにする
今回は、動的にViewを追加する
@Override
public View onCreateView(LayoutInflater inflater , ViewGroup container, Bundle savedInstanceState){
return inflater.Inflate(R.layout.fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreate(view, savedInstanceState);
TextView text = (TextView)findViewById(R.id.text);
text.setGravity(Gravity.CENTER);
text.setText(getArguments().getString(“value”));
}
[/java]
次に、Fragmentを動的に追加する
onClick()をOverrideして
追加ボタンを押したタイミングで
Fragmentクラスを追加、更新する
@Override public void onClick(View v){ FragmentManager manager = getSupportFragmentManager(); Fragment fragment = manager.findFragmentById(R.id.parent); if(R.id.btn_add_code == v.getId() || R.id.btn_add_xml == v.getId()){ if(fragment == null){ FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.parent, getMyFragment(v.getId(), true), "MyFragment"); transaction.commit(); }else{ FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.parent, getMyFragment(v.getId(), false)); transaction.commit(); } }else if(R.id.btn_remove == v.getId() && fragment. != null){ FragmentTransaction transaction = manager.beginTransaction(); transaction.remove(fragment); transaction.commit(); } }
Fragmentの追加、更新には
FragmentManagerクラスの
beginTransaction()を使うことで
トランザクションを開始する
そして、次に追加、更新、削除した後に
commit()で、トランザクションをコミットする
FragmentManagerクラスの
findFragmentById()で
生成済みのFragmentが取得できないのなら
add()で、Fragmentを追加すればいい
Fragmentが生成済みなら
replace()でFragmentを更新できる