我正在尝试学习如何使用 actionbarsherlock 处理片段。我尝试按照本教程进行操作。一切正常,直到我尝试创建另一个片段,它不会成为操作栏的一部分。用户单击其中一个片段中的按钮:
该片段打开:
我想单击后退按钮并返回到前一个片段。这就是我尝试这样做的方式 - 将此片段添加到后台堆栈:
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1:
ft.replace(R.id.fragment_container, Fragment_Products);
ft.addToBackStack(null);
ft.commit();
break;
}
}
如果我在这个阶段单击后退按钮 - 它可以工作,我会返回到上一个片段(目录)。但是,如果此时我转到另一个选项卡,例如“社交”,然后点击后退按钮,这就是我得到的:
两个片段相互重叠。如果我继续点击其他标签 - 它会更加混乱(我有它的视频,但似乎我无法在此处嵌入视频)。
这是我的主要活动的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setTitle("Fragments app");
ActionBar.Tab FragmentSocialTab = actionBar.newTab().setText("Social")
.setIcon(android.R.drawable.star_on);
ActionBar.Tab FragmentWebTab = actionBar.newTab().setText("Web");
ActionBar.Tab FragmentCatalogTab = actionBar.newTab().setText("Catalog");
Fragment Fragment_Social = new Fragment_Social();
Fragment Fragment_Web = new Fragment_Web();
Fragment Fragment_Catalog = new Fragment_Catalog();
FragmentSocialTab.setTabListener(new TabsListener(Fragment_Social));
FragmentWebTab.setTabListener(new TabsListener(Fragment_Web));
FragmentCatalogTab.setTabListener(new TabsListener(Fragment_Catalog));
actionBar.addTab(FragmentCatalogTab);
actionBar.addTab(FragmentWebTab);
actionBar.addTab(FragmentSocialTab);
actionBar.setSelectedNavigationItem(2);
}
还有我的 Tab Listener 的代码:
class TabsListener implements ActionBar.TabListener{
public Fragment fragment;
public TabsListener(Fragment fragment){
this.fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
为什么会发生,如何解决?