0

私はフラグメントAPIがかなり得意で、電話/タブレットでマスター/詳細パターンを作成する方法を知っています。 しかし、携帯電話やタブレットで別のスタイルのナビゲーションを作成するにはどうすればよいでしょうか。

最も明白な例は、スワイプタブではなく、すべてのフラグメントが内部に配置された、電話のスワイプタブとある種のタブレットレイアウトです。

巨大なifステートメント以外にこれを行うためのエレガントな方法はありますか?

ここに画像の説明を入力してください

//編集

したがって、私が推測したように、2つのレイアウトを作成して(電話-ポケットベル/タブレットを表示-3つの静的フラグメント)、アクティビティのonCreateでレイアウト内の何かをチェックして、電話とタブレットのどちらであるかを判断します。次に、タブナビゲーションを初期化するか、タブレットを使用している場合は初期化します。それはうまくいくはずです。

IO2012アプリからのコードスニペット

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_home);
    FragmentManager fm = getSupportFragmentManager();

    mViewPager = (ViewPager) findViewById(R.id.pager);
    if (mViewPager != null) {
        // Phone setup
        mViewPager.setAdapter(new HomePagerAdapter(getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab()
                .setText(R.string.title_my_schedule)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab()
                .setText(R.string.title_explore)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab()
                .setText(R.string.title_stream)
                .setTabListener(this));

        homeScreenLabel = getString(R.string.title_my_schedule);

    } else {
        //Tablet setup
        mExploreFragment = (ExploreFragment) fm.findFragmentById(R.id.fragment_tracks);
        mMyScheduleFragment = (MyScheduleFragment) fm.findFragmentById(R.id.fragment_my_schedule);
        mSocialStreamFragment = (SocialStreamFragment) fm.findFragmentById(R.id.fragment_stream);
    }
}

すでに電話でタブナビゲーションを使用している方は、デザイン的に機能する場合は、タブレットにこれを実装することを検討してください。すでにフラグメントAPIの準備ができているので、言い訳はできません。

4

1 に答える 1

1

RomanNurikの2012I/ Oアプリをご覧ください。このアプリは、サイズと向きの可能なすべての組み合わせでナビゲーション/レイアウトをほぼ切り替えます。

http://code.google.com/p/iosched/

于 2013-02-12T13:57:52.617 に答える