【问题标题】:Navigation Drawer with View Pager with tabs not working带有 View Pager 的导航抽屉和选项卡不起作用
【发布时间】:2015-07-21 07:23:20
【问题描述】:

注意:我已经使用 ViewPager 实现了选项卡。我正在创建一个在 viewpager 中具有三个选项卡(片段)的应用程序。我想创建一个导航抽屉,我可以在其中看到这三个选项卡,然后单击任何一个导航到相应的选项卡。

Main Activity 扩展了 ActionBarActivity 并具有以下代码

 private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

Fragment fragment = new CategoryFragment();
    Bundle args = new Bundle();
    args.putInt(CategoryFragment.CATEGORY_NUMBER, position);
    fragment.setArguments(args);

    FragmentTransaction transaction =      getSupportFragmentManager().beginTransaction();

    transaction.replace(R.id.pager, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
    getSupportFragmentManager().executePendingTransactions();

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

}

CategoryFragment 看起来像这样

    public static class CategoryFragment extends android.support.v4.app.Fragment {
    public static final String CATEGORY_NUMBER = "category_number";

    public CategoryFragment() {
        // Empty constructor required for fragment subclasses
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        int fragmentNumber = getArguments().getInt(CATEGORY_NUMBER);
        View rootView=null;
        if(fragmentNumber==0)
        {
             rootView = inflater.inflate(R.layout.F1, container, false);
        }
        else if (fragmentNumber==1)
        {
            rootView = inflater.inflate(R.layout.F2, container, false);
        }
        else if(fragmentNumber==2)
        {
            rootView = inflater.inflate(R.layout.F3, container, false);
        }
        else
        {
            rootView = inflater.inflate(R.layout.F4, container, false);
        }
        return rootView;
    }


}

CategoryFragment 中的 OnCreateView 函数被调用,但 Fragments(F1. F2. F3 ) 未设置。还有其他调用这些片段的方法吗?这些片段中的每一个都是各自的选项卡。

【问题讨论】:

标签: android android-fragments android-viewpager navigation-drawer fragmentmanager


【解决方案1】:

您需要在 Activity 中使用一种方法来帮助在选项卡之间切换。比如:

public void displayView(int position) {

    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new FragmentA();               
            break;
        case 1:
            fragment = new FragmentB();

            break;
        case 2:
            fragment = new FragmentC();

            break;

        default:
            break;
    }

    if (fragment != null) {
        FragmentTransaction transaction =  fragmentManager.beginTransaction();
        transaction.addToBackStack(null);
        transaction.replace(R.id.frame_container, fragment);
        transaction.commit();

每个Fragment应该是相互独立的,不需要将bundle信息传递给CategoryFragment

【讨论】:

  • 我删除了 CategoryFragment 并按照您的建议实现了 displayView 。之后,它也不会更改标签并只显示一个白页:(
  • @AnmolSrivastava 你还有这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多