一番考えておくべきことは、様々な処理をできるだけListViewやAdapterに任せること。 そのためにいくつかカスタムビューに必要なものをまとめてみる。
はじめに 前回は ViewPager の基本的な使いかたについて解説しました。この ViewPager ですが、 View だけでなく Fragment をアイテムにすることができます! ということで今回は Support Package に用意されている FragmentPagerAdapter の使いかたを解説します。今回はサンプルは、下図のような伝統色Viewerをつくってみます。今回ももちろん Android 1.6 から動作します! FragmentPagerAdapter を使って ViewPager をつくる FragmentPagerAdapter は Fragment をアイテムとして表示する PagerAdapter です。各ページを Fragment にできます。このクラスを使って ViewPager を作ってみましょう。 1. Fragment をつくる まずは V
Fragment のサンプルでは、setArguments() を使って Bundle を介して値を渡している例を多く見かけます。 ① HogeFragment f = new HogeFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); とやるより ② HogeFragment f = new HogeFragment(num); や ③ HogeFragment f = new HogeFragment(); f.setNum(num); とかやった方がいいんじゃない? Arguments 介するのは面倒じゃない?なにがいいの? と思う人も多いのではないでしょうか。 そこで、Arguments がどういいのかを説明したいと思います。 1. Fragment のコンスト
Android レイアウトから生成した Fragment は FragmentTransaction の対象にしてはいけない ■ レイアウトから作成した Fragment には setArguments できない 前回のエントリで Fragment の Arguments の利点をいろいろ紹介しましたが、レイアウト内に <fragment> タグで定義して生成した Fragment には setArguments() をすることができません。 まず、Fragment.java のコードをみると Arguments を保持するフィールドである mArguments のコメントとして“生成時の引数である”と書いてあります。 http://tools.oesf.biz/android-4.0.1_r1.0/xref/frameworks/base/core/java/android/app/Fr
Viewを継承した独自のカスタムビュー内のレイアウトをxmlで定義することができる。 レイアウトに関する事はJavaコードで書くよりもxmlで定義しておいたほうがコード量が減るし、後々メンテナンスしやすくなる。 今回はこの方法について見ていく。 まず、サンプルアプリの完成形となる画面を示す。 画面上部に表示された赤色の部分がカスタムビューとなっている。 テキストビューとその下に3つボタンがあって、それぞれのボタンを押すとテキストビューに押したボタンのテキストが表示されるようになっている。 まずは、このカスタムビューに適用するレイアウトxmlを示す。 myview.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro
Androidでは、Viewを自在にカスタムすることが可能です。 Viewをカスタムした例は、以下の記事にも書かれていますので参考にしてみてください。 Drag and Drop を用いてViewをドラッグする Gellaryを使って横スクロールする 今回は、タップした際に、指定したアクティビティに画面遷移を行うButtonを作成してみます。さらに、遷移先のアクティビティは、layoutファイルのxmlファイルの属性にて指定できるようにします。 ポイントは以下の点です。 attrs.xmlファイルにて、独自に属性を定義する main.xmlファイルにて、独自に定義した属性に値をセットする(カスタムViewをレイアウトに配置) カスタムViewを作成し、独自に定義した属性の値をViewに反映させる 以下が今回のサンプルのキャプチャ画像です。今回は、独自の属性として、ボタンに表示するテキスト、
4日目〜。 --- DialogFragment で表示される Dialog を指定するための主なメソッドは次の2つ。 onCreateView() と onCreateDialog()。 Dialog のテーマと ContentView の中身だけ指定すればいい場合は onCreateView() の方だけを Override すればいいのですが、例えば OK と Cancel のある AlertDialog を作ろうとしたときは onCreateDialog() を Override して、表示したい AlertDialog のインスタンスを返すようにします。 このときに、onCreateView() で null 以外を返していると落ちます。 public class MainActivity extends Activity { @Override public void onCr
DialogFragment を private なインナークラスで定義してたら、 画面の回転(Activity再生成) でアプリが落ちてしまった。 出力された例外はこれ。 Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment ErrorCaseDialogFragment: make sure class name exists, is public, and has an empty constructor that is public Fragment が private なインナークラスなので、 外部からコンストラクタ呼び出せなくて例外になった様子。 使用したコードはこんなかんじ。 ErrorCaseDialogFragment のクラス定義を private s
「PreferenceFragmentを使って2Paneな設定画面を作成する」「Fragmentを使ってMenuを動的に作成する」にて、Android3.0で追加された、Fragmentについて紹介してきました。 今回も、Fragmentの機能を紹介していきます。 FragmentはActivityなどと同じ様に、ライフサイクルを持ちます。 それらを確認した上で、Button操作による、Fragmentの追加/編集を行っていきましょう。 Fragmentのライフサイクル Fragmentにはライフサイクルがあります。 それは以下の通り。基本的な流れはActivityと同様ですが、UIの生成等に関わるMethodが追加されています。 〜コアライフサイクルMethod〜 1. onAttach(Activity) →Activityに関連付けされた際に一度だけ呼ばれる。 2. onCreate
ListView には addHeaderView() や addFooterView() でヘッダーやフッターをつけることができます。 また、ListView にはリストのデータが空の時に表示させる emptyView を指定することができます。データがないときに画面が真っ黒になるとユーザーはアプリが壊れたと思ってしまうかもしれないので、空のときにはメッセージをだしましょうとよく言われます。 ただ、この emptyView を指定するとリストのデータが空のときに、ヘッダーやフッターも表示されなくなります。 emptyView を指定している状態でヘッダーやフッターを表示できるのか調べてみました。 まず、ListView で emptyView への切り替えをどこでしているかいうと AdapterView の updateEmptyStatus(boolean empty) です。 htt
複数のフラグメント間の UI を利用する場合であっても、あたかも一つのアクティビティ内で振る舞いを定義するように、 簡単に動作を定義できます。 ここでは簡単なサンプルを作ることで、異なるフラグメント内のウィジェットにアクセスする様子を見てみましょう。 なお、フラグメントは Android 3.0 以降のものであることに注意してください。Android 2 以前の環境では動作しません。 異なるフラグメントに属する UI 要素へのアクセス ここで作るプログラムは次のようなものです。 まず、黒(デフォルト背景色) と青のフラグメントがあります。黒い側にはエディットテキストとボタンが配置されています。 一方、青いフラグメント内には TextView がひとつ配置されています。 エディットテキストに何か文字を入力して、ボタンを押すと・・・ TextView にその文字が表示されます。 こうした動きは
■ Fragment のサブクラス ・DialogFragment ・ListFragment ・PreferenceFragment ・WebViewFragment ■ その他のヘルパークラス ・FragmentManager ・FragmentTransaction Activity のレイアウトにフラグメントのレイアウトを挿入する ■ Activity のレイアウトファイルに <fragment> タグで入れる <?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
Fragment から Activity にコールバックしたいときに、例えばこんな感じで実装することができます。 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainFragment fragment = new MainFragment(); fragment.setOnOkBtnClickListener(new MainFragment.OnOkBtnClickListener() { @Override public void onOkClicked() { // TODO Auto-generated method stub } }); getF
リスト1の19行目を削除して、text1だけにlayout_weight属性を指定すると、余白部分をtext1だけで独占する事になる。 LinearLayoutのorientation属性をhorizontalに,TextViewを横方向に配置して、 layout_weightありなしの画面を比較すると、以下のようになる。 weightSum属性-分け合う部分の合計を指定 親ウィジェットにweightSum属性を指定すると、余白部分の合計値を指定できる。 子ウィジェットは、その合計値に対してlayout_weightで指定した割合で、余白部分を分け合うことになる。 次の例では、余白部分の合計値を5として、2つのTextViewで余白部分を1対2で分け合うので、余白部分が2余ることになる。 リスト2 コードによるweightの指定 リスト2のレイアウトを、コードを使って実現すると以下のように
Nested weights are bad for performance 突然ですが、私、Eclipse プロジェクトの Warning アイコンが嫌いです。 プロジェクトの横に出ている黄色い三角形のやつです。 Warning が出たままで放っておくなんてありえない!と思います。 徹底的に直して、いつもこのアイコンが出ないようにプロジェクトを作るよう心がけています。 …A型ではないです。 だって、これを放置する習慣がついちゃうと、本当に重要な Warning が出たときに無視してしまうでしょ? ところが、最近 ADT が XML に lint をかけて警告してくれるようになったのです。 いや、それ自体は良いことです。 ダメな書き方を教えてくれるわけですから。 しかし、 Nested weights are bad for performance という Warning、修正方法がないみ
以下のエラーが出たとき、idをつけたら治った。 android.view.InflateException: Binary XML file line <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayoutMain" <==この行を入れたら治った。 android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:name="jp.co.android.app.FragmentSize"
This document discusses fragments in Android. It covers defining fragments in XML layout files using the <fragment> tag, communicating between fragments and activities, and how fragments were implemented before Android 3.0 using ActivityGroup and LocalActivityManager which are now deprecated. The document also discusses how fragments are used to modularize parts of an app's UI and how they are mea
この連載では、Android 4.0(コードネームはIce Cream Sandwich)の知っておきたい機能やこれから使えそうな機能を4回に渡って紹介していきます。第1回は、Android 3.0(コードネームはHoneycomb)以降のアプリを作成する上での定番「Fragment」と「ActionBar」、Android 4.0で追加された「ActionProvider」について、図1のようなアプリを一覧表示するAndroidアプリを通じて解説していきます。後述しますが、図1にはそれぞれに対応するコードを示しておきます。 新たに導入されたFragment これから学ぶFragmentですが、この機能はAndroid 4.0ではなく一つ前のメジャーバージョンであるタブレット向けOSのAndroid 3.0から追加されたものです。ただし、スマートフォンで利用できるようになったのはAndro
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く