抽屉导航 + 选项卡导航有太多选项卡
Drawer navigation + tab navigation having too many tabs
我正在尝试将抽屉式导航和选项卡导航结合在一起。我已经成功地结合了 2。当我第一次启动该应用程序时,一切正常。但是,在我单击抽屉项目并返回选项卡片段后,添加了太多选项卡。我试图限制数量,但没有用。此外,当我打开抽屉项目中的其他片段时,选项卡仍然存在。
这里有一些图片可以展示
当我第一次打开应用程序时
打开抽屉后
当我再次回到第一个片段时
这是我在 createview 上的选项卡片段代码
private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_home, container, false);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getChildFragmentManager());
mViewPager = (ViewPager) v.findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between pages, select the
// corresponding tab.
getActivity().getActionBar().setSelectedNavigationItem(position);
}
});
actionBar=getActivity().getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// show the given tab
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
// hide the given tab
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
// probably ignore this event
}
};
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
}
return v;
}
我认为是
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
造成这种情况的部分原因,谁能帮我解决这个问题?
您必须在添加选项卡之前调用 actionBar.removeAllTabs()
...因为您没有调用 actionBar.removeAllTabs()
它们累计 (4+4)...
P.S。请不要再使用操作栏和导航模式了..Action bar navigation modes are deprecated in Android L
将 actionBar 替换为工具栏,并将选项卡替换为 PagerTabStrip 或其他东西...
当框架附加到Activity并且必须创建其视图时将调用onCreateView()方法,然后将多次调用向ActionBar添加选项卡的代码,这导致你的问题。
由于 ActionBar 属于您的 Activity,而不是您的 Fragment,因此您最好在 Activity 中为其添加标签,将以下代码移至您的 Activity 应该会有所帮助:
private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };
actionBar=getActivity().getActionBar(); // remove getActivity().
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// show the given tab
// This line need to be changed, you can make a public method in
// your fragment which set the current item of ViewPager, and
// call the method in the Activity.
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
// hide the given tab
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
// probably ignore this event
}
};
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
}
我正在尝试将抽屉式导航和选项卡导航结合在一起。我已经成功地结合了 2。当我第一次启动该应用程序时,一切正常。但是,在我单击抽屉项目并返回选项卡片段后,添加了太多选项卡。我试图限制数量,但没有用。此外,当我打开抽屉项目中的其他片段时,选项卡仍然存在。
这里有一些图片可以展示
当我第一次打开应用程序时
打开抽屉后
当我再次回到第一个片段时
这是我在 createview 上的选项卡片段代码
private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_home, container, false);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getChildFragmentManager());
mViewPager = (ViewPager) v.findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between pages, select the
// corresponding tab.
getActivity().getActionBar().setSelectedNavigationItem(position);
}
});
actionBar=getActivity().getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// show the given tab
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
// hide the given tab
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
// probably ignore this event
}
};
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
}
return v;
}
我认为是
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
造成这种情况的部分原因,谁能帮我解决这个问题?
您必须在添加选项卡之前调用 actionBar.removeAllTabs()
...因为您没有调用 actionBar.removeAllTabs()
它们累计 (4+4)...
P.S。请不要再使用操作栏和导航模式了..Action bar navigation modes are deprecated in Android L
将 actionBar 替换为工具栏,并将选项卡替换为 PagerTabStrip 或其他东西...
当框架附加到Activity并且必须创建其视图时将调用onCreateView()方法,然后将多次调用向ActionBar添加选项卡的代码,这导致你的问题。 由于 ActionBar 属于您的 Activity,而不是您的 Fragment,因此您最好在 Activity 中为其添加标签,将以下代码移至您的 Activity 应该会有所帮助:
private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };
actionBar=getActivity().getActionBar(); // remove getActivity().
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// show the given tab
// This line need to be changed, you can make a public method in
// your fragment which set the current item of ViewPager, and
// call the method in the Activity.
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
// hide the given tab
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
// probably ignore this event
}
};
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(tabListener));
}