在活动OnCreate中加载片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在活动OnCreate中加载片段相关的知识,希望对你有一定的参考价值。
问题:从片段1切换到片段2,切换发生,但两者都可见。 (片段2成为焦点)
片段1是MenuFragment Fragment 2是GameFragment
我相信这是发生的,因为我的片段1包含在我的主activity.xml中
<fragment
android:id="@+id/menu_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_menu">
</fragment>
main.xml中的代码将片段加载到主活动中。每当我使用以下代码用游戏片段替换菜单片段时:
public void replaceFragment(Fragment fragment)
{
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.gameview_layout, gameFragment);
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit();
}
游戏片段出现并叠加在菜单片段上方。如何让菜单片段消失?我确信一个简单的修复方法是makeVisible(false)或类似的东西,但我相信真正的问题是在xml文件中编程以包含MenuFragment。
问题:如何在main.java类中编程以在create上加载片段?
我想这样做,所以我可以编程它来加载片段1(MenuFragment),而不是它已经在那里。两者都可见的唯一原因是因为片段1包含在我的main.xml中
您应该创建单个FrameLayout(或任何其他),而不是创建两个片段,并在切换期间替换帧布局,如下例所示。
XML
<FrameLayout
android:id="@+id/frameContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Java的
public void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameContainer, fragment);
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit();
}
尝试使用像LinearLayout或FrameLayout这样的布局作为片段的容器,并在onCreate中制作类似的东西
getFragmentManager().beginTransaction()
.add(R.id.menu_fragment, MenuFragment.getInstance())
.commit();
并将容器ID重命名为“@ + id / fragmentContainer”或类似的东西。
在片段布局中,xml添加背景颜色来解决问题
JAVA
public void loadFragment(Fragment fragment) {
String backStateName = fragment.getClass().getName();
FragmentManager fragmentManager = getSupportFragmentManager();
boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameContainer, fragment);
fragmentTransaction.addToBackStack(backStateName);
fragmentTransaction.commit();
}
}
XML
<FrameLayout
android:id="@+id/frameContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
以上是关于在活动OnCreate中加载片段的主要内容,如果未能解决你的问题,请参考以下文章
在一个活动中加载单个片段两次,从本地json文件中加载2个问题
如何在Android中加载带有动画的cardview GridView?