Too*_*ool 97 android android-fragments
活动:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment1 fragment = new Fragment1();
Fragment2 fragment2 = new Fragment2();
transaction.replace(R.id.Fragment1, fragment);
transaction.addToBackStack(null);
transaction.commit();
FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
transaction2.replace(R.id.Fragment1, fragment2);
transaction2.addToBackStack(null);
transaction2.commit();
Run Code Online (Sandbox Code Playgroud)
视图中的代码:
<fragment
android:id="@+id/Fragment1"
android:name="com.landa.fragment.Fragment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_below="@+id/include1" />
Run Code Online (Sandbox Code Playgroud)
问题是,内容并没有真正被替换 - 它被置于顶部(因此它重叠).
当我单击返回时,第一个片段会正确显示(没有第二个片段),但最初两个片段都是可见的(我只希望最后一个片段可见).
我在这里错过了什么?
Sap*_*kar 135
你在这里犯了两件事:
您无法替换静态放置在xml布局文件中的片段.您应该FrameLayout在布局中创建一个容器(例如a ),然后使用编程方式添加片段FragmentTransaction.
FragmentTransaction.replace期望包含片段的容器的id而不是片段的id作为第一个参数.所以你应该将第一个参数作为你添加第一个片段的容器的id传递给.
您可以参考此链接了解更多详情.
swb*_*dit 30
我有一个类似的问题,但我的问题是我使用了两个不同的片段管理器:一个来自getSupportFragmentManager()和一个来自getFragmentManager().如果我添加了一个片段,SupportFragmentManager然后尝试用片段替换片段FragmentManager,片段就会被添加到顶部.我需要更改代码,以便使用相同的代码FragmentManager并处理问题.
Poo*_*ony 17
android开发者网站建议使用a FrameLayout在运行时动态加载片段.您已在xml文件中对片段进行了硬编码.因此,无法在此链接中提及的运行时删除它:
http://developer.android.com/training/basics/fragments/creating.html
此链接显示如何通过您的程序添加片段:
http://developer.android.com/training/basics/fragments/fragment-ui.html
我有同样的问题,看到了所有的答案,但没有一个包含我的错误!在尝试替换当前片段之前,我在容器活动的xml中显示默认片段,如下所示:
<FrameLayout
android:id="@+id/fragment_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="....ShopFragment"
android:id="@+id/fragment"
tools:layout="@layout/fragment_shop" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
在那之后,虽然我传递FrameLayout给了fragmentTransaction.replace()但是我有确切的问题.它显示了前一个片段之上的第二个片段.
通过从xml中删除片段并以编程方式在onCreate()程序开头的默认预览的容器活动方法中显示它来解决此问题,如下所示:
fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_frame_layout,new ShopFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
和容器活动xml:
<FrameLayout
android:id="@+id/fragment_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
Run Code Online (Sandbox Code Playgroud)
您可以在替换片段之前清除 backStack:
FragmentManager fm = getActivity().getSupportFragmentManager();
for (int i = 0; i < fm.getBackStackEntryCount(); i++) {
fm.popBackStack();
}
// replace your fragments
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84482 次 |
| 最近记录: |