2012年8月22日水曜日

AndroidでFacebookやGoogle+みたいなメニューを表示する(続)

昨日書いた記事の続きです。
AndroidでFacebookやGoogle+みたいなメニューを表示する

昨日までのはただ左にメニューを表示するだけだったので
実際にメニューを押したあとに画面を切り替えるところまで実装してみました。

まず、メニューをListViewに書き直します。
<!-- Menu Layout -->
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/menuLayout"
    android:background="#666666" >

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/menuList" >

    </ListView>

</LinearLayout>

次にメインとなる画面の切り替えです。
画面の切り替えですが、レイアウトファイルを切り替えるやり方でなくアクティビティを切り替えるようなやり方で作ってみました。
ここらへんの内容は以下の記事が参考になりました。


ざっくり言うと、あらかじめコンテナという枠を作っておいて
そこに選択したメニューにあったActivityを埋め込むかんじです。
まずは、メインとなる画面となるActivityをActivityGroupに変更して、以下のような関数を作ります。
private void changeActivity(int position) {
    Intent intent = new Intent();
    String activeId = "";

    switch (position) {
        case 1:
            intent.setClass(this, Content1Activity.class);
            activeId = "content1Activity";
            break;
        case 2:
            intent.setClass(this, Content2Activity.class);
            activeId = "content2Activity";
            break;
        case 3:
            intent.setClass(this, Content3Activity.class);
            activeId = "content3Activity";
            break;
        default:
            intent.setClass(this, HomeActivity.class);
            activeId = "homeActivity";
            break;
    }

    // 表示されているビューを削除
    container.removeAllViewsInLayout();

    // 指定されたビューを表示
    Window containerActivity = getLocalActivityManager().startActivity(activeId, intent);
    container.addView(containerActivity.getDecorView());
}

関数の引数 positionがメニューが押された時の番号になりそれに合わせて各Activityを割り当てています。

実際にメニューがクリックされた時の処理は以下。
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
    // メニューを表示・非表示を切り替える
    animMainLayout();

    // ビューを切り替える
    changeActivity(position);
}

これだけです。
animMainLayout()はメニューの表示・非表示を状態に合わせて切り替えるような関数です。

いくつかファイルを分割しながら作ったのでここではすべてのソースを載せてませんが、一応GitHubにもソース置いています。
興味がある方は是非試してみて下さい。
https://github.com/hayashida/LeftMenuSample

一応、以下のような画面になります。


0 件のコメント:

コメントを投稿