トップへ戻る
C++、C#、VC、JAVA、Androidプログラミングを初歩的なことから書いていきます。

Fragmentでtabを生成

今回は、FragmentでTabActivityっぽいものを作る方法について書いていきます。 なぜTabActivityを使わないかと言うと、Android3.0から非推奨になってしまったからです・・・
こちらを参考にしました。 新たにTabを制作する場合は参考サイトをご覧ください。今から書くことは、TabActivityからの移行方法になります。
まず、今までTabActivityを継承していたクラスを、FragmentActivityを継承するように変更します。 次に、レイアウトを以下のように変更してください。
<android.support.v4.app.FragmentTabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"/>
 
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0"/>
         
        <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"/>
 
    </LinearLayout>
 
</android.support.v4.app.FragmentTabHost>
次に、これまでActivityを継承していた(Tabに入れていた)クラスを、Fragment継承に変更します。ここで、Fragmentのライフサイクルに注意が必要です。 こちらに詳しく書いてあるので、一度ご覧ください。 特に注意したいのは、再びTabを開く時はonCreateViewからだということです。 また、再び開く時は新たにViewを獲得し、それを返す必要があります。
レイアウト内のボタンなどを設定したい場合viewを経由して行なってください。以下が例となります。
/**
	 * 追加メソッド
	 *
	 * @param inflater
	 * @param container
	 * @param savedInstanceState
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// 第3引数のbooleanは"container"にreturnするViewを追加するかどうか
		// trueにすると最終的なlayoutに再度、同じView groupが表示されてしまうのでfalseでOKらしい
		mMyView = inflater.inflate(R.layout.webbrowser, container, false);

		// テキストの設定
		mtextUrl = (EditText) mMyView.findViewById(R.id.urlBar);

		return mMyView;
	}
基本的な内容はonCreateViewメソッドに書くことになります。
最後に、Tabを管理しているFragmentActivityを継承しているクラスの記述です。基本的にはTabActivityと変わりません。
mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
		mTabHost.setup(this,getSupportFragmentManager(),R.id.content);

		mTabHost.addTab(setTab( タグ,タブ名),なんとか.class,null);
		mTabHost.addTab(setTab( タグ,タブ名),なんとか.class,null);
	/**
	 * タブのセッター
	 *
	 * @param tag
	 * @param indicator
	 * @return
	 */
	private TabSpec setTab( String tag, String indicator) {
		TabSpec spec = mTabHost.newTabSpec(tag);
		//画像とかでもいいし、ボタンでもいい
		spec.setIndicator(indicator);
		return spec;
	}
以上で以降が完了します。色々なイベントについては他のページでまとめます。
inserted by FC2 system