Viewpager,Tablayout和NavigationDrawer问题

时间:2016-04-02 08:15:46

标签: android android-viewpager navigation-drawer android-tablayout

我正在尝试使用Viewpager和tablayout创建两个标签。我左边还有一个导航抽屉。在viewpager中,我想显示两个不同的片段

Viewpager:-
1. HomeFragment
2. VideoCategoriesFragment

Fragment inside navigation drawer:- LibFinderFragment

在单击某个项目的导航抽屉中,我希望能够替换整个viewpager选项卡,直到它与另一个片段说LibFinderFragment。目前我得到的是来自viewpager的HomeFragment被LibFinderFragment取代,但如果我在viewpager中选择了VideoCategoriesFragment选项卡,则LibFinderFragment不会被替换。我知道可能viewpager和tab布局需要在片段内,但我无法完成这项工作。以下是我的代码

这是主要的活动代码: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:app1="http://schemas.android.com/apk/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar" />

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:background="@drawable/background_tabs_two"
        app:tabGravity = "fill"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <android.support.v4.widget.DrawerLayout
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/apk/tools"
            android:id="@+id/drawer_layout_mainhost"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app1:context="com.taureano.superjokes.MainHostActivity"
            app1:openDrawer="start" >

            <android.support.v4.view.ViewPager
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/viewpager_mainhost"
                android:layout_width="match_parent"
                android:layout_height="0dp" >


            </android.support.v4.view.ViewPager>

            <fragment
                android:id="@+id/fragment_navigation_drawer_new"
                android:name="com.taureano.superjokes.NavigationDrawerFragmentNew"
                android:layout_width="@dimen/navigation_drawer_width"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                ads:layout="@layout/fragment_navigation_drawer_new" />
        </android.support.v4.widget.DrawerLayout>

        <RelativeLayout
            android:id="@+id/floatingButtonRelativeLayout"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_marginBottom="50dp" >

            <android.support.design.widget.FloatingActionButton
                android:id="@+id/fab"
                style="@style/floating_action_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:src="@drawable/btn_add_jokes"
                app:backgroundTint="#212121"
                app:borderWidth="0dp"
                app:fabSize="normal"
                app:rippleColor="@color/primaryColor" />

            <com.github.fabtransitionactivity.SheetLayout
                android:id="@+id/bottom_sheet"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="bottom"
                android:elevation="2dp"
                app:ft_color="@color/primaryColor"
                app:ft_container_gravity="center" >
            </com.github.fabtransitionactivity.SheetLayout>
        </RelativeLayout>
    </FrameLayout>

</LinearLayout>

对于viewpager和tablayout中的标签,我这样做: -

mPager = (ViewPager) findViewById(R.id.viewpager_mainhost);
setupViewPager(mPager);

tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.post(new Runnable() {
    @Override
    public void run() {
        tabLayout.setupWithViewPager(mPager);
        setupTabIcons();
    }
});
tabLayout
        .setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

            @Override
            public void onTabUnselected(Tab arg0) {
                // TODO Auto-generated method stub

            }

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

            }

            @Override
            public void onTabReselected(Tab arg0) {
                // TODO Auto-generated method stub

            }
        });

private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    tabLayout.getTabAt(1).setIcon(tabIcons[1]);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapterDesignLib adapter = new ViewPagerAdapterDesignLib(
            getSupportFragmentManager());   
    home = new HomeFragment(this);
    adapter.addFrag(home, "Text");
    adapter.addFrag(new VideoCategoriesFragment(this), "Video");
    viewPager.setAdapter(adapter);
}

// For showing navigation drawer
NavigationDrawerFragmentNew drawerFragment = (NavigationDrawerFragmentNew) getSupportFragmentManager()
        .findFragmentById(R.id.fragment_navigation_drawer_new);
drawerFragment.setUp(R.id.fragment_navigation_drawer_new,
        (DrawerLayout) findViewById(R.id.drawer_layout_mainhost), toolbar);

在导航抽屉里面,我有一个带有OnItemClicked的回收者视图

@Override
public void itemClicked(View view, int position) {

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    Intent j = new Intent(getActivity(), ExtrasActivity.class);

    switch(position){
    case 0:
        ft.replace(R.id.home_layout, new HomeFragment(getActivity())).commit();
        break;
    case 1:
        ft.replace(R.id.home_layout, new AboutUs(getActivity())).commit();
        break;

    case 2:

    ft.replace(R.id.home_layout, new LibFinder(getActivity())).commit();
    break;

    }
    mDrawerLayout.closeDrawers();

  }

0 个答案:

没有答案