android-support-v4を使ってみる (ListFragment)

前回やや強引ではありますが、ActionBarを実装してみました。でもよく考えてみるとCompatibility Packageの機能を使っていないですね。Compatibility PackageにActionBarの機能がないからしょうがないのです。


ちなみにCompatibility Packageのドキュメントですが、Android Developersのサイトを眺めてみましたが、見つけることが出来ませんでした。なので私はjavadocでドキュメントを生成してみています。
こんな感じで作れますので、ご参考に。

% pwd
android-sdk-r08/extras/android/compatibility/v4
% javadoc -sourcepath src/java/ -subpackages android.support.v4 -d docs


これでdocs/index.htmlが出来上がるので見てみましょう。ちなみに私の環境では文字化けしました。エンコードUTF-8にすると正常に表示されます (なぜかShiftJISに設定されてしまう) 。


閑話休題
今回はCompatibility Packageらしく、ListFragmentを使ってみました。まずは画面レイアウトを定義します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- アクションバー -->
    <include layout="@layout/actionbar" />

    <!-- リスト表示Fragment -->
    <fragment android:id="@+id/fragment_filelist"
        class="com.yohpapa.research.actionbar.FragmentFileList"
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
	
</LinearLayout>


ActionBarは単なるViewなので縦方向のLinearLayout内にfragmentを追加しています。問題はこのFragmentFileListというFragmentですが、とっても簡単に実装してみました。

public class FragmentFileList extends ListFragment {

    private Thread _thread = null;
    private Handler _handler = null;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // スレッドを起動してファイルリストを生成させる
    }

    // ファイルリスト完了時のコールバック処理
    private final FileListGenerator.Callback _fileListCallback = new FileListGenerator.Callback() {
        @Override
        public void notifyFileList(final File[] files) {
            if(files == null || files.length <= 0)
                return;

            _handler.post(new Runnable() {
                @Override
                public void run() {
                    setListAdapter(...);
                }
            });
        }
    };
}


かなりはしょって書いてありますが、要は別スレッドで作ったファイルリストをsetListAdapterメソッドを使ってリストに設定しているだけです。ListAdapterを工夫すれば表示を豪華にすることも簡単です。



実際に表示させてみて驚いたんですが、このListFragment、setListAdapterしてリスト表示するまで自動でプログレス表示してくれるんですね。



とてもいい感じです。