我正在尝试使用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();
}