获取操作栏选项卡以粘贴片段

时间:2014-01-07 20:51:44

标签: java android android-fragments android-actionbar android-tabs

我目前有一个MainActivity.java,它应该是唯一的活动类。虽然在那个活动类中我有一个导航抽屉,它链接到其他片段视图。

目前我面临的主要问题是在片段下实现制表符,并使它们仅适用于该片段和子片段。我运行了我的应用程序并显示了标签,但是在我访问TeamsAndDriversFragment后它们也出现在其他片段上。

在我的MainActivity.java中,我有以下功能,可以帮助指出一旦有人在导航栏中点击它们就会产生的片段:

/**
 * Diplaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new TimeAndScoringFragment();
            break;
        case 1:
            fragment = new ScheduleFragment();
            break;
        case 2:
            fragment = new StandingsFragment();
            break;
        case 3:
            fragment = new TeamsAndDriversFragment();
            break;
        case 4:
            fragment = new NewsFragment();
            break;
        default:
            break;
    }

    if (fragment != null) {

        // Create a fragment transaction object to be able to switch fragments
        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // Replace whatever is in the fragment container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.frame_container, fragment);
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

这是我当前的TeamsAndDriversFragment类,其中我有一个带标签的操作栏导航:

public class TeamsAndDriversFragment extends Fragment implements TabListener {

private List<Fragment> fragList = new ArrayList<Fragment>();

@Override
public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);

    ActionBar bar = getActivity().getActionBar();

    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab mTeamsTab = bar.newTab();
    mTeamsTab.setText("Teams");
    mTeamsTab.setTabListener(this);
    bar.addTab(mTeamsTab);

    Tab mDriversTab = bar.newTab();
    mDriversTab.setText("Drivers");
    mDriversTab.setTabListener(this);
    bar.addTab(mDriversTab);
}

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

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    Fragment f = null;
    TabFragment tf = null;

    if(fragList.size() > tab.getPosition()) {
        fragList.get(tab.getPosition());
    }

    if(f == null) {
        tf = new TabFragment();
        Bundle data = new Bundle();
        data.putInt("idx", tab.getPosition());
        tf.setArguments(data);
        fragList.add(tf);
    } else {
        tf = (TabFragment) f;
    }

    ft.replace(android.R.id.content, tf);
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    if(fragList.size() > tab.getPosition()) {
        ft.remove(fragList.get(tab.getPosition()));
    }
}


}

1 个答案:

答案 0 :(得分:1)

displayView()方法中,只需移除ActionBar中的所有标签,这样您就可以获得一个干净的ActionBar,但TeamsAndDriversFragment片段除外:< / p>

private void displayView(int position) {
     getSupportActionBar().removeAllTabs();
     // ...
}