3

この質問で説明されているように、Android (Sherlock) アクション バーのタブを切り替えています: Programmatically switch tabs in Android using ActionBarSherlock。呼び出されたタブに引数を渡す
方法はありますか?

期待してありがとう!


@semperfly から要求された詳細情報:

私の MainActivity には ActionBar があり、ActionBar.TabListener を実装しています

    actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    tabCalculate = actionBar.newTab();
    tabCalculate.setText("Calculate");
    tabCalculate.setTabListener(this);
    actionBar.addTab(tabCalculate);

    tabArchive = actionBar.newTab();
    tabArchive.setText("Archive");
    tabArchive.setTabListener(this);
    actionBar.addTab(tabArchive);

これは ActionBar.TabListener の実装です。

public void onTabSelected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    SherlockFragment fragment = null;
    if( tabCalculate.equals(tab) ) {
        if( fragmentInput == null ) {
            fragmentInput = new FragmentInput();                
        }            
        fragment = fragmentInput;
    } else if ( tabArchive.equals(tab)) {
        if( fragmentArchive == null ) {
            fragmentArchive = new FragmentArchive();
        }
        fragment = new FragmentArchive();
    }
    fragmentTransaction.replace(R.id.fragmentsContainer, fragment);

    fragmentTransaction.commit();
}    

public void onTabUnselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {

}

public void onTabReselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {

}  

私の最初のアプローチは、次のように ArchiveFragment から InputFragment をロードすることでした。

                FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            SherlockFragment fragment = new FragmentInput();
            Bundle arguments = new Bundle();
            arguments.putSerializable(FragmentInput.ARG_INPUTDATA_TO_LOAD, inputData);
            fragment.setArguments(arguments);
            fragmentTransaction.replace(R.id.fragmentsContainer, fragment);

            fragmentTransaction.commit();

これは完全に正常に機能しましたが、それに応じて ActionBar のアクティブなタブ インジケーターを切り替えませんでした。入力フラグメントがアクティブであったにもかかわらず、アーカイブ タブの下の青い線がアクティブでした。

次に、この方法を試してタブ/フラグメントを切り替えました:

getSherlockActivity().getSupportActionBar().setSelectedNavigationItem(0);

これは機能しますが、アクティブ化するタブに引数を渡すことができなくなりました。

4

2 に答える 2

13

遅くなりましたが、次を使用できます。

getActivity().getActionBar().setSelectedNavigationItem(1); //where 1 equals the 2nd tab
于 2013-07-29T18:58:03.510 に答える
0

これが私の質問 Fragments - Making event callbacks to the activityに対する答えになるようです

于 2012-10-24T20:40:44.907 に答える