0

Sherlock ライブラリを使用して ActionBar を使用しています。このアプリにもタブを実装しました。

今、ActionBar で NavigationList を使用しているときに、Tab フラグメントが失われました。私が使用したActionBarでListNavigationを使用するために:

mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

&この前mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);はタブに使用していましたが、リストはありませんでした。

今、私は両方を使いNavigationListたいTab Fragments

public class MainActivity extends SherlockFragmentActivity implements OnNavigationListener {
    ActionBar mActionBar;
    ViewPager mPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /** Getting a reference to action bar of this activity */
        mActionBar = getSupportActionBar();

        /** Set tab navigation mode */
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        //mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(
                this, 
                R.array.locations, 
                android.R.layout.simple_spinner_item);

        mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this);
        mActionBar.setIcon(R.drawable.app_icon);

        /** Getting a reference to ViewPager from the layout */
        mPager = (ViewPager) findViewById(R.id.pager);

        /** Getting a reference to FragmentManager */
        FragmentManager fm = getSupportFragmentManager();      

        /** Defining a listener for pageChange */
        ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {              
                super.onPageSelected(position);
                mActionBar.setSelectedNavigationItem(position);             
            }

        };

        /** Setting the pageChange listner to the viewPager */
        mPager.setOnPageChangeListener(pageChangeListener);

        /** Creating an instance of FragmentPagerAdapter */
        MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the FragmentPagerAdapter object to the viewPager object */
        mPager.setAdapter(fragmentPagerAdapter);

        mActionBar.setDisplayShowTitleEnabled(true);

        /** Defining tab listener */
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {

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

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

            }

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

        /** Creating Android Tab */
        Tab tab = mActionBar.newTab()
                .setText("Android")
                .setIcon(R.drawable.android)
                .setTabListener(tabListener);

        mActionBar.addTab(tab);

        /** Creating Apple Tab */
        tab = mActionBar.newTab()
                .setText("Apple")
                .setIcon(R.drawable.apple)
                .setTabListener(tabListener); 
        mActionBar.addTab(tab);  


    }
}

MyFragmentPagerAdapter.java

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    final int PAGE_COUNT = 2;

    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);

    }

    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {
        Bundle data = new Bundle();
        switch(arg0){

            /** Android tab is selected */
            case 0:
                AndroidFragment androidFragment = new AndroidFragment();                
                data.putInt("current_page", arg0+1);
                androidFragment.setArguments(data);
                return androidFragment;

            /** Apple tab is selected */
            case 1:
                AppleFragment appleFragment = new AppleFragment();
                data.putInt("current_page", arg0+1);
                appleFragment.setArguments(data);
                return appleFragment;   
        }

        return null;
    }

    /** Returns the number of pages */
    @Override
    public int getCount() {     
        return PAGE_COUNT;
    }

}

他の 2 つのクラス: 1)public class AppleFragment extends SherlockListFragment

2)public class AndroidFragment extends SherlockListFragment

リストをActionBarに追加するとタブが失われる理由を教えてください。

4

2 に答える 2

1

NAVIGATION_MODE_LISTNAVIGATION_MODE_TABSを同時に使用することはできません。一度に使用できるナビゲーション モードは 1 つだけです。

于 2013-03-29T08:27:00.273 に答える
1

でのリスト ナビゲーションとタブの使用ActionBarは相互に排他的です。使用できるのは 1 つだけです。

リストとタブの両方を使用する場合は、少なくとも 1 つに別の実装を使用する必要があります。タブには、 を使用できますViewPagerIndicator。のスピナーは、ActionBarいくつかの方法で作成できます。

  • カスタム ビューを使用してスピナーを作成する
  • actionLayoutまたはactionViewClassメニュー項目に使用
  • ActionProviderメニュー項目に使用

編集:
あなたの場合、最も簡単な調整はタブViewPagerIndicatorの代わりに使用することです。ActionBarリストのナビゲーションを変更するには、さらに作業が必要です。
プロジェクトの Web ページには、ViewPagerIndicatorいくつかの設定例が示されています。プロジェクトのGitHub ページには、ライブラリのさまざまなセットアップの使用方法を示す多くのサンプルがあります。あなたが探しているのは だと思いますTabPageIndicatorので、このサンプルを見てください(タブのタイトルは で作成されていることに注意してFragmentPagerAdapterください。もう必要ActionBar.TabありActionBar.TabListenerません)。

于 2013-03-29T08:27:17.550 に答える