我试图实现两个选项卡,并且还有一个导航抽屉。我可以单独做这两件事,但是当我试图将两者结合起来遇到问题时。我最初有用于创建我的两个选项卡和我的MainActivity中的导航抽屉的代码,这是当时的片段活动,但是当我清楚地知道对于导航抽屉中的Home选项时,我决定重构代码将选项卡制作成带有标签的片段,然后像以前那样填充两个片段。导航抽屉项目是具有选项卡的片段
在启动似乎很好,但是当我在导航抽屉中单击home选项时,每个选项卡中的片段似乎被剥离,每次单击该选项时都会添加两个选项卡。
private void selectItem(int position) {
Fragment fragment = new NullFragment();
switch (position){
case 0:
fragment = new HomeFragment();
break;
case 1:
//Placeholder
fragment = new PlanetFragment();
}
// update the main content by replacing fragments
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
drawerListView.setItemChecked(position, true);
setTitle(drawerItemTitles[position]);
drawerLayout.closeDrawer(drawerListView);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
HomeFragment.java
public class HomeFragment extends Fragment implements ActionBar.TabListener {
AppSectionsPagerAdapter appSectionsPagerAdapter;
ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = null;
/*if(savedInstanceState == null){*/
rootView = inflater.inflate(R.layout.activity_home, container, false);
appSectionsPagerAdapter = new AppSectionsPagerAdapter(getFragmentManager());
final ActionBar actionBar = getActivity().getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
viewPager.setAdapter(appSectionsPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(
actionBar.newTab()
.setIcon(R.drawable.ic_sync_to_cloud)
.setTabListener(this));
actionBar.addTab(
actionBar.newTab()
.setIcon(R.drawable.ic_send_to_device)
.setTabListener(this));
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
return rootView;
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in the ViewPager.
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
}
我想这是因为HomeFragment的新实例每次创建,并在其布局的唯一事情是一个ViewPager。有没有办法做到这一点,所以没有创建一个新的实例,而是片段可以存储和恢复。如果您需要查看更多代码,请告知我们。
这似乎做的伎俩!非常感谢,我欠你一个。 – Unem
嗨@ntrrobng我有同样的问题(问题1),但我使用标签布局,而不是ActionBar你能帮我吗 – angel