1

タブ ナビゲーションを必要とする最近の要件変更があります。アプリケーションですでに ActionBarSherlock を使用しています。以前は、私の UI はアクティビティで構成されていました。しかし、私が読んだことから、TabBarにはフラグメントアクティビティが必要ですか? 既存のコードを保持して TabBar を実装する方法はありますか、それともアプリケーションを完全に書き直す必要がありますか? 私の活動はすべて SherlockActivity を拡張していますか?

敬具、

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragmentActivity;




public class NewMainActivity extends SherlockFragmentActivity implements ActionBar.TabListener,
        ViewPager.OnPageChangeListener
{
    private ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.textlayout);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);
        //mViewPager.setPageMarginDrawable(R.drawable.border);
        mViewPager.setPageMargin(16);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText("First Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Second Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Third Tab").setTabListener(this));
    }

    @Override
    public void onPageScrollStateChanged(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft)
    {
        mViewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    private class MainPagerAdapter extends FragmentPagerAdapter
    {
        public MainPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            switch (position)
            {
            case 0:
                // return (mFragmentA = new FragmentA());

            case 1:
                // return (mFragmentB = new FragmentB());

            case 2:
                // return (mFragmentC = new FragmentC());

            }
            return null;
        }

        @Override
        public int getCount()
        {
            return 3;
        }
    }
}
4

1 に答える 1

2

もちろん、アプリケーションを書き直す必要はありません。屈折が必要なだけです。

SherlockFragmentまず、コードを(s)に移動することから始めてください。

ActivityAActivityBおよびの 3 つのアクティビティがあるとしActivityCます。

1 - 3 つの SherlockFragments を作成します: FragmentAFragmentBおよびFragmentC

2 - コードをフラグメントに移動し、必要な変更 (オーバーライド、コンテキスト参照など) を行います。

3 - ここで、タブ ナビゲーションを使用してメインの FragmentActivity をセットアップします。

public class MainActivity extends SherlockFragmentActivity implements
        ActionBar.TabListener, ViewPager.OnPageChangeListener {

    private FragmentA mFragmentA;
    private FragmentB mFragmenB;
    private FragmentC mFragmentC;

    private ViewPager mViewPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(new MainPagerAdapter(
                getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);
        mViewPager.setPageMarginDrawable(R.drawable.border);
        mViewPager.setPageMargin(16);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText(R.string.tab_a_title)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText(R.string.tab_b_title)
                .setTabListener(this));
        actionBar.addTab(actionBar.newTab()
                .setText(R.string.tab_c_title).setTabListener(this));
    }

    @Override
    public void onPageSelected(int position) {
        getSupportActionBar().setSelectedNavigationItem(position);
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    private class MainPagerAdapter extends FragmentPagerAdapter {
        public MainPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return (mFragmentA = new FragmentA());

            case 1:
                return (mFragmentB = new FragmentB());

            case 2:
                return (mFragmentC = new FragmentC());

            }
            return null;
        }


        @Override
        public int getCount() {
            return 3;
        }
    }
}

main_layout.xml

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

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

</LinearLayout>
于 2012-09-04T06:59:47.997 に答える