0

Sherlock Library の ActionBar を使用して、アプリケーションに取り組んでいます。ActionBar の右隅、つまりActionBar の ListNavigation に項目のリストを追加したいと考えています。

現在、次のコードを使用しています。

public class MainActivity extends SherlockFragmentActivity {
    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_TABS);

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

        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this);

        /** 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);  
        tab = mActionBar.newTab()
                .setText("Apple-2")
                .setIcon(R.drawable.apple)
                .setTabListener(tabListener); 

        mActionBar.addTab(tab);  
        tab = mActionBar.newTab()
                .setText("Apple-3")
                .setIcon(R.drawable.apple)
                .setTabListener(tabListener); 
        mActionBar.addTab(tab);  

    }
}

1)しかし、mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this); コンテキストでエラーが発生しています。これはここでは機能していません。

2) このボタンのクリックでリストをポップアップする方法がわかりません。

3)また、ナビゲーションリストにこれらの3行のコードを実装したとき

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

            mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
            mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this);

タブが非表示になりました。私を助けてください。

4

1 に答える 1

1

1) あなたのアクティビティは OnNavigationListener を実装していますか? そうではないようで、Activity インスタンスへの参照を setListNavigationCallbacks() に渡しています。これには OnNavigationListener が必要です。

2) このボタンのクリックの意味がわかりません。

3) NAVIGATION_MODE_TABS ではなく NAVIGATION_MODE_LIST を指定しているため、タブが非表示になりました。ActionBar の一部として、どちらか一方しか持つことができません。

タブとドロップダウンの両方が必要な場合にできることは、ActionBar で NAVIGATION_MODE_LIST を使用し、アクティビティ内の Fragment に一連のタブを含めることです。TabHost クラスを見てください。

于 2013-03-29T06:28:38.990 に答える