2013年10月28日月曜日

Fragmentを使ってみる

ViewPagerを利用している際に、Framentが(・∀・)イイ!!という情報を(σ・∀・)σゲッツ!!したので使ってみました(`・ω・´)シャキーン

■Fragmentについて
・Android 3.0 (APIレベル11) から導入されたコンポーネント。
・Support PackageでサポートされているのでAndroid 1.6 (APIレベル4) から使用可能。
・Activityと同じくライフサイクルを持っている。(Activitiに依存している)
・サブクラスとして、次のものがある。
DialogFragment ダイアログを提供するために拡張されたクラス
ListFragment 一覧(ListView)の表示等を提供するために拡張されたクラス
PreferenceFragment アプリケーションの設定情報を容易に扱えるように拡張されたクラス
WebViewFragment ブラウザ(WebView)の表示を提供するために拡張されたクラス
FragmentBreadCrumbs パン屑リスト
FragmentTabHost タブ用

他にはこちらに詳しく載っていましたので抜粋させて頂きましたъ(゚Д゚)グッジョブ!!
Fragment を使ってみよう
Fragmentの特徴
・View + ロジックの再利用可能なコンポーネントを作れる。
・Viewを持たない、ロジックだけの再利用可能なコンポーネントも作れる。
・Activityのライフサイクルと関連するライフサイクルを持つ
・バックスタック機能
・1つのViewのようにレイアウトXMLファイルにかける(タグ)
・複数のViewをも持ってそれぞれをコントロールできる。

Fragmentのいまいちな所
・カスタムViewと同じように完全修飾名でレイアウトXMLファイルに書くので...
・グラフィカルエディタで正確に再現できない場合がある。
・クラス名がレイアウトエディタ上で自動補完されないので、タイポによるエラーを起こしやすい

どこまでこれまのでViewとActivityにやらせて、どこを新しくFragmentにやらせばいいの?

・View or カスタムView
描画とそのための最低限のロジック

・Framgment
View+そのViewに関連するロジック(Viewの操作やViewに表示するデータの処理)

・Acitivity
それ以外。ActivityとFragment間のデータの受け渡し、複数のFragment間のデータの受け渡し、Windowの設定などActivityに関連するロジック
色々利点があるそうなので早速使ってみる(ΦωΦ)フフフ…
■AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fragment2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.fragment2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
■fragment_main.xml
fragment用のレイアウトになります。
単純にTextViewとImageViewを配置したものにします。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#eeeeee"
    >
     
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        />
     
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        />
 
</LinearLayout>
■activity_main.xml
メインのアクティビティ用のレイアウトになります。
注意点として、classに記述するFragmentの完全修飾名のクラスパスになります:(;゙゚'ω゚'):
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.example.fragment1.MainFragment" />

■MainFragment.java
Fragmentのソースになります。
package com.example.fragment1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainFragment extends Fragment {
 
 /**
  * 
  * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
  */ 
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  
     //第1引数:レイアウトXMLファイルのリソースID、
     //第2引数:
     //第3引数:trueにするかfalseにするかで戻り値となるルートビュー(View)が変わる。
     //       trueの場合には、第2引数で渡したViewGrou、falseの場合には第1引数で渡したリソースIDがルートビューになる
     View view = inflater.inflate(R.layout.fragment_main, container, false);
     //TextViewを取得する
     TextView text = (TextView)view.findViewById(R.id.text_view);
     //文字列を設定する
     text.setText("(゚∀゚)キタコレ!!");
     //
        return view;
 }
}
■MainActivity.java
メインのソースコードになります。
package com.example.fragment1;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
 
public class MainActivity extends FragmentActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
}


これだと見た目上は何が違うのかさっぱり(´・ω・`)ショボーン

今後はFragmentを利用して開発していくなり(ΦωΦ)フフフ…
以上です(`・ω・´)ゞビシッ!!

参考URL

0 件のコメント:

コメントを投稿