戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

フラグメント:Fragment (Android 3.0~)

Fragment はタブレット向け(Android 3.0~)の機能です。
ホームページのフレームのように複数の画面を1つにまとめることができます。
(Activityがフレームで、Fragmentがページのイメージ)

API Reference: Fragment
ソフトウェア技術ドキュメントを勝手に翻訳 - 1.1 フラグメント

■ 画面イメージ -----------------------------------------------
android_Fragment.png

■ 静的に定義 --------------------------------------------------
まずはアクティビティを定義します。
XML側でFragmentを呼んでいるだけで、Java側では特に何もしていません(サンプルが表示のみのため)
<fragment>タグの android:name で対象のJavaファイルのクラスパスを指定します。

sample_fragment.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="jp.inujirushi.Fragment1"
android:id="@+id/fragment1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment android:name="jp.inujirushi.Fragment2"
android:id="@+id/fragment2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>

FragmentActivity.java
package jp.inujirushi;

import android.app.Activity;
import android.os.Bundle;

public class FragmentActivity extends Activity {
/** アクティビティを生成した時に呼ばれます。 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_fragment);
}
}


次に、左右に表示するFragmentを定義します。
FragmentのXMLは通常のアクティビティと同様の設定をします。
まるでActivityですが、FragmentはAndroidManifest.xmlの設定は不要です。

fragment1.xml(左側)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<TextView android:text="Fragment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff" />
</LinearLayout>

fragment2.xml(右側)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">
<TextView android:text="Fragment2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000" />
</LinearLayout>


Fragment1.java(左側)
package jp.inujirushi;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
/** フラグメントを生成した時に呼ばれます。 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false);
}
}

Fragment2.java(右側)
package jp.inujirushi;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends Fragment {
/** フラグメントを生成した時に呼ばれます。 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment2, container, false);
}
}


■ 動的に定義 --------------------------------------------------
Fragment は直接レイアウトに追加することができません。
追加や変更を行う場合には、FragmentTransaction クラスを使用します。
package jp.inujirushi;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class FragmentActivity extends Activity {
/** アクティビティを生成した時に呼ばれます。 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// IDを定義する
final int ID_FRAGMENT1 = 1;
final int ID_FRAGMENT2 = 2;

// レイアウトを生成する
LinearLayout layout = new LinearLayout(this);
setContentView(layout);
// フラグメントに置換するレイアウトを生成する①
LinearLayout fragment1 = new LinearLayout(this);
fragment1.setId(ID_FRAGMENT1);
fragment1.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT,
1));
layout.addView(fragment1);
// フラグメントに置換するレイアウトを生成する②
LinearLayout fragment2 = new LinearLayout(this);
fragment2.setId(ID_FRAGMENT2);
fragment2.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT,
1));
layout.addView(fragment2);

// フラグメントマネージャを生成する
FragmentManager manager = getFragmentManager();
// フラグメントトランザクションを開始する
FragmentTransaction transaction = manager.beginTransaction();
// レイアウトをフラグメントに差し替える
transaction.replace(ID_FRAGMENT1, new Fragment1());
transaction.replace(ID_FRAGMENT2, new Fragment2());
// 設定をコミットする
transaction.commit();
}
}


Fragmentが1つの場合、置換用のレイアウトを生成せずに設定できます。
    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// フラグメントトランザクションを開始する
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// ルートビューをフラグメントに差し替える
transaction.replace(android.R.id.content, new Fragment1());
// 設定をコミットする
transaction.commit();
}
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。