片段相互重叠
Posted
技术标签:
【中文标题】片段相互重叠【英文标题】:Fragments overlapping each other 【发布时间】:2013-04-02 02:28:08 【问题描述】:我有一个带有 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 个:
如何防止它发生?
【问题讨论】:
【参考方案1】:为片段布局设置背景可以解决此问题。
【讨论】:
这应该是一条评论。 android:background="?android:colorBackground" 你也必须在下面添加这样点击不会传递给旧片段 ==> android:clickable="true" 为片段添加背景不是正确的解决方案。它只是一个 hack【参考方案2】:您可以通过按标签搜索片段来管理片段。将fragment添加到backstack时添加TAG名称
transaction.addToBackStack("myCustomFragmentTag");
如果你想在应用程序的任何地方销毁 Fragment:
Fragment previousInstance = getFragmentManager().findFragmentByTag("myCustomFragmentTag");
if (previousInstance != null)
transaction.remove(previousInstance);
您可以尝试覆盖某些行为,这样这行代码将销毁最后一个已初始化的 Fragment
getFragmentManager().popBackStack();
【讨论】:
我尝试按如下方式使用它:transaction.addToBackStack("CategoryFragment");
然后尝试在 onResume 和 onTabReselected 方法中使用其余代码。但我还是看到了这些碎片重叠……【参考方案3】:
根据这个问题: Android: fragments overlapping issue
您只需在 XML 文件中设置背景颜色
解决这个问题。
【讨论】:
【参考方案4】:你可以试试这样的标签..
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_ android:layout_ <LinearLayout android:id="@+id/LinearLayout01" android:layout_ android:layout_ android:orientation="vertical"> <TabWidget android:id="@android:id/tabs" android:layout_ android:layout_></TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_ android:layout_></FrameLayout> </LinearLayout> </TabHost>
【讨论】:
以上是关于片段相互重叠的主要内容,如果未能解决你的问题,请参考以下文章