■ Fragment#getActivity()
- - PR -
Fragmentが所属するActivityを取得します。
■ Fragment#getTag()
Fragmentに割り当てたタグを取得します。ViewはIDによって管理されますが、FragmentはIDによる管理とタグによる管理が可能です。UIを持たないFragmentはIDを割り当てられないため、タグによって管理します。
■ Fragment#getFragmentManager()
FragmentからFragmentManagerを取得します。
■ FragmentManager#beginTransaction()
FragmentTransactionを取得します。
Fragmentに対する、いわゆる画面遷移には、「トランザクション」という考え方を適用します。ここで取得したFragmentTransactionのメソッドを呼び出しても、即座にそれらを適用するわけではありません。後述する、FragmentTransaction#commit()を呼び出して、初めて適用されます。
■ FragmentTransaction#addToBackStack(String)
トランザクションをバックスタックに追加します。現在のトランザクションをcommit()後に参照したい場合に追加しておきます。任意でこのトランザクションに名前を付けられますが、必要がなければnullを渡します。
■ FragmentTransaction#commit()
トランザクションをコミットします。もし、addToBackStack(String)でトランザクションをバックスタックに追加している場合、このメソッドの戻り値としてバックスタックエントリのIDを」返します。
■ FragmentManager#popBackStack()
addToBackStack()でスタックしたトランザクションを1つ戻します。ユーザによるバックキー押下と同様の処理を任意で行えます。
FragmentsをAndroidアプリに実装して使うには
ここからは、Fragmentを使用するアプリのための、設定方法と実装方法について解説します。
■ レイアウト
Fragmentを画面にレイアウトする方法は、Viewと同様、レイアウトXMLに設定するか、ソースコード上で追加するかを選べます。
![]() |
| 図8 レイアウトエディタのFragment |
レイアウトエディタには、「Fragment」という新たなレイアウトが追加されており、これをドラッグ&ドロップするだけで、レイアウトが行えます。
レイアウトエディタでレイアウトした結果が以下です。
![]() |
| 図9 レイアウトエディタ上のデザイン |
Fragmentをレイアウトするうえで重要なのは、Fragmentの幅と高さ、およびウェイトの設定です。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment android:id="@+id/fragment1"
android:layout_height="match_parent"
android:layout_width="0dp" 【1】
android:layout_weight="1" 【2】
android:name="com.example.android.fragment.BookmarkFragment" />
<fragment android:id="@+id/fragment2"
android:layout_height="match_parent"
android:layout_width="0dp" 【1】
android:layout_weight="3" 【3】
android:name="com.example.android.fragment.WebFragment" />
</LinearLayout>
【1】では、左右に配置されるFragmentのそれぞれの幅を0dpに設定します。
【2】では、左側のリストは幅のウェイトを1に設定します。
【3】では、右側のブラウザは幅のウェイトを3に設定します。このようにすることで、画面サイズによらず、リスト:ブラウザ=1:3に保てます。
■ Fragmentの実装
レイアウトXMLで指定したFragmentを実装します。ここでは、今回のサンプルの中から、オーバーライドした2つのメソッドを取り上げて解説します。
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
List<String> list = new LinkedList<String>();
for (String[] bookmark : BOOKMARKS) {
list.add(bookmark[0]);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, list);
ListView listView = new ListView(getActivity());
listView.setAdapter(adapter);
return listView;
}
上記は、onCreateView()でFragmentに表示するViewを作成・初期化しているコードです。このクラスはListFragmentを継承しているため、メソッドに渡されている引数を一切使用していませんが、Fragmentから継承させた独自Fragmentの場合、別に作成したレイアウトと、LayoutInfraterで紐付ける必要があります。
先にも述べたとおり、ListFragmentの場合はonActivityCreated()で初期化する方が賢明です。
@Override
public void onListItemClick(ListView l, View v, int position,long id) {
if (position == 0) {
getFragmentManager().popBackStack();
} else {
String url = BOOKMARKS[position][1];
WebFragment web = new WebFragment(url);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment2, web);
ft.addToBackStack(null);
ft.commit();
}
}
上記はリストがクリックされた際に呼び出されるListFragment固有のイベントメソッドです。
クリックされた場所が先頭なら、バックスタックからポップし、そうでなければ、新しいFragmentを作成し、既存のものと置き換え、トランザクションをバックスタックに追加しています。
これだけの処理で、Android 2.xでは実現できなかった画面内の画面遷移が行えるようになります。
実は、もっと奥が深い「Fragments」
Android 3.0から導入されたFragmentsを紹介しました。次回は、この機能がAndroid 1.6以降で使用可能になるAndroid Compatibility Packageを紹介します。
なお、Fragmentは実はもっと奥が深いのですが、今回はここまでとし、スマートフォン向けとタブレット向けが統合されるIce Cream Sandwichが登場してから、Fragmentsとそれがもたらす可能性について再度取り上げる予定です。
ちなみにJavaのSDKではありませんが、今回のようなFragmentsの考え方と違い、画面サイズごとに別のスタイルシートを当てて画面の大きさの違いを解決するという方法があります。Flex SDK 4.5.1の「CSS Media Query」機能です。詳細は、以下の記事をご参照ください。
| Flash Builderで始めるAndroidアプリ開発“超”入門 Flashでできる! Androidアプリ制作入門(4) スマホアプリ向け機能が大幅に追加されたAdobe AIR/Flexフレームワークの便利機能を使ったアプリ開発の仕方を解説 「Smart & Social」フォーラム 2011/7/11 |
||
■ @IT関連記事
| スマートフォンアプリデザインに役立つ基礎のまとめ! 一撃デザインの種明かし(14) iPhone/AndroidアプリのUIデザインに困っている方のために、アプリの事例や、作るときのコツ、画面サイズのデータ、参考リンクなどを紹介 |
||
| 売れるスマホアプリを目指せ! テスト達人への道 安藤幸央のランダウン(56) iPhone/iPad・Androidアプリ開発にが重要な“使い心地”。しっかりとしたテストを経た高品質なアプリを作るためのポイントをまとめて紹介しよう 「Java Solution」フォーラム 2011/4/27 |
| 今日から始める! Androidケータイアプリ作成の基礎 いまこそ知っておきたい「Androidアプリ」とは 日に日に国内でのニュースが増えているAndroidケータイ。その特徴を押さえてアプリ作成を始めるための基礎を紹介します 「Smart & Social」フォーラム 2009/11/19 |
||
| 携帯アプリを作って学ぶJava文法の基礎 Java文法の基礎を楽しみながら学ぶために、携帯電話のJavaアプリを作ってみましょう。携帯電話のJavaだけにとどまらないJava全般の文法の基礎が理解できる初心者向け入門連載です 「Smart & Social」フォーラム |
||
| 【改訂版】Eclipseではじめるプログラミング New! これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります 「Java
Solution」フォーラム |
||
| スマートフォンで「できちゃうこと」って? イチから始める! Androidセキュリティ(1) Androidに潜む危険はマルウェアだけはありません。実はアプリの作り方にも注意が必要です。クウと一緒に学びましょう 「Security&Trust」フォーラム 2011/3/3
|
||
ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします! |
| Index | ||||||||
|
||||||||
Androidで動く携帯Javaアプリ作成入門 バックナンバー 連載インデックスへ»
- 第1回 Android Market配布を目指しEclipseでHelloWorld!
- 第2回 Androidアプリ作成の基本“Activity”とは何か?
- 第3回 ブラウザや地図、ストリートビューの基、Intentとは?
- 第4回 簡単でワクワクするAndroidウィジェット10連発!
- 第5回 Androidアプリの使いやすさを左右する5つのレイアウト
- 第6回 AndroidでSQLiteのDB操作をするための基礎知識
- 第7回 常駐アプリが作成できるAndroidの“サービス”とは
- 第8回 アプリを国際化してAndroid Marketから世界へ発信
- 第9回 Netbookにも広まるAndroidで、かつてないWeb体験を
- 第10回 Androidのホーム画面に常駐するアプリを作るには
- 第11回 Android 1.6のジェスチャーとテキスト読み上げを使う
- 第12回 SurfaceViewならAndroidで高速描画ゲームが作れる
- 第13回 iPhoneより多彩なAndroidのセンサをアプリで操作
- 第14回 Android 2.1の新機能で作る、美しく燃える“待ち受け”
- 第15回 Android NDKでJNIを使用してアプリを高速化するには
- 第16回 地図/位置情報/GPSを使うAndroidアプリを作るには
- 第17回 もはやケータイに必須のカメラをAndroidで制御しよう
- 第18回 開発者が知っておきたいAndroid 2.2新機能 12連発
- 第19回 XMLレイアウトでAndroidアプリに“設定画面”を追加
- 第20回 Androidアプリで“アニメーション”するための基礎知識
- 第21回 アニメーションでAndroidに独創的な画面エフェクトを
- 第22回 開発者が知って得するAndroid 2.3の新機能18選
- 第23回 Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 第24回 Androidの画面の大きさの違いを解決するFragments
- 第25回 Compatibility packageで2.x系でもマルチサイズ対応
- 第26回 開発者が知らないと損するAndroid 4.0の新機能44選
- 第27回 Android 4.0でアプリ開発を始めるための環境構築
- 第28回 Android 4.0で注目の顔認識をアプリに組み込むには
- 第29回 Androidのウィジェットにノーティフィケーションするには
- 第30回 Androidアプリでマルチメディアを扱うための基礎知識
- 第31回 Android 4.0のサービス/プロセス間通信の基本
| ご意見、ご感想は Smart&Social 会議室へどうぞ |
| Smart&Social フォーラム トップページへ |
TechTargetジャパン
- JenkinsでCIすればAndroidアプリ開発はもう怖くない (2012/5/23)
Androidアプリ開発における継続的インテグレーションの重要性やJenkinsの利点を解説し、環境構築の仕方や使い方の手順を紹介します - Open Graphアプリを作りApp Centerに登録するには (2012/5/18)
ユーザーの活動を共有できるFacebookの新機能を使ったアプリの開発方法と新しいアプリストアへの登録手順を解説 - Bootstrap、Hogan.js、FinagleなどTwitter系OSS (2012/5/15)
Twitterのアーキテクチャやオープンソースへの取り組みなどの講演模様をお届け。OpenJDKやStorm、Gizzard、Twitter4Jも注目 - ソーシャルゲーム/スマホ開発イベント記事が人気 (2012/5/11)
4月はソーシャルゲームの開発者向けイベントや、Webとネイティブの対決が熱かった! UnityやPerfumeも見逃せない!?
|
|
キャリアアップ
スポンサーからのお知らせ
イベントカレンダー
- - PR -




