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を更新できる