互相重叠的片段

我有一个3个选项卡的操作栏,每个选项卡打开一个片段。 第三个标签“目录”有一个列表: 在这里输入图像说明

当我点击一个项目时,会打开另一个片段,这不是操作栏的一部分:

public void onClick(View v) { switch (v.getId()) { case R.id.category1: Fragment cosmeticsFragment = new ActivityCosmetics(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, cosmeticsFragment); transaction.addToBackStack(null); transaction.setTransition(1); transaction.commit(); break; ... 

这就是它之后的样子: 在这里输入图像说明

从这一点,如果我去其他选项卡,然后返回到目录选项卡,我看到以前的2个片段相互重叠:

在这里输入图像说明

我如何防止它发生?

  • 在浏览片段时正确处理DrawerLayoutanimation
  • 带有片段的Android InstantiationException(它是公共的)
  • 在具有共享元素的片段上输入转换以共享元素为目标
  • 如何运行或启动Android的片段内的应用程序?
  • NullPointerException在FragmentManager中
  • 使用ActionBar旋转Android的双重碎片
  • Android片段工厂方法vs构造函数重载
  • 应用程序之后重叠隐藏的碎片被杀死并恢复
  • 您可以通过标记search来pipe理片段。 添加片段到后台添加TAG名称

     transaction.addToBackStack("myCustomFragmentTag"); 

    如果你想在应用程序的任何地方销毁碎片:

     Fragment previousInstance = getFragmentManager().findFragmentByTag("myCustomFragmentTag"); if (previousInstance != null) transaction.remove(previousInstance); 

    你可以尝试覆盖一些行为,所以这行代码将销毁初始化的最后一个片段

     getFragmentManager().popBackStack(); 

    设置一个背景碎片布局将解决这个问题。

    根据这个问题: Android:片段重叠问题

    您只需要在XML文件中设置背景颜色即可

    解决这个问题。

    你可以尝试像这样的标签..

      public class Tabs extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tabs); Resources res = getResources(); // Resource object to get Drawables TabHost tabHost = getTabHost(); // The activity TabHost TabHost.TabSpec spec; // Resusable TabSpec for each tab // Intent intent; // Reusable Intent for each tab // Create an Intent to launch an Activity for the tab (to be reused) Intent intent1 = new Intent().setClass(this, Social.class); // Initialize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("app_name").setIndicator("Practice", res.getDrawable(R.drawable.tab_social)) .setContent(intent1); tabHost.addTab(spec); tabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.bbgg); // Do the same for the other tabs Intent intent2 = new Intent().setClass(this, Web.class); spec = tabHost.newTabSpec("application").setIndicator("Application", res.getDrawable(R.drawable.tab_web)) .setContent(intent2); tabHost.addTab(spec); tabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.bbgg); Intent intent3 = new Intent().setClass(this, Catalog.class); spec = tabHost.newTabSpec("toplinks").setIndicator("Top Links", res.getDrawable(R.drawable.tab_catalog)) .setContent(intent3); tabHost.addTab(spec); tabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.bbgg); tabHost.setCurrentTab(0); } } 

    在你的布局xml中

      <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content"></TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"></FrameLayout> </LinearLayout> </TabHost>