在 Activity OnCreate 中加载片段
Load Fragment in Activity OnCreate
问题:从分片1切换到分片2,发生了切换,但都可见。 (片段 2 成为焦点)
片段 1 是 MenuFragment
片段 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 中的代码将片段加载到主 activity 中。每当我使用此代码将菜单片段替换为游戏片段时:
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 class 中编程以在创建时加载片段?
我想这样做,所以我可以对其进行编程以先加载片段 1 (MenuFragment),而无需它已经存在。两者都可见的唯一原因是片段 1 包含在我的 main.xml
中
尝试使用 LinearLayout 或 FrameLayout 等布局作为片段的容器,并在 onCreate 中制作类似
getFragmentManager().beginTransaction()
.add(R.id.menu_fragment, MenuFragment.getInstance())
.commit();
并将容器 ID 重命名为“@+id/fragmentContainer”或类似名称。
您不应创建两个片段,而应创建单个 FrameLayout(或任何其他)并在切换期间替换框架布局,如下例所示。
XML
<FrameLayout
android:id="@+id/frameContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Kotlin
fun replaceFragment(fragment:Fragment){
supportFragmentManager
.beginTransaction()
.replace(R.id.frameContainer, fragment)
.commit()
}
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();
}
在你的片段布局中xml添加背景颜色来解决问题
问题:从分片1切换到分片2,发生了切换,但都可见。 (片段 2 成为焦点)
片段 1 是 MenuFragment 片段 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 中的代码将片段加载到主 activity 中。每当我使用此代码将菜单片段替换为游戏片段时:
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 class 中编程以在创建时加载片段?
我想这样做,所以我可以对其进行编程以先加载片段 1 (MenuFragment),而无需它已经存在。两者都可见的唯一原因是片段 1 包含在我的 main.xml
中尝试使用 LinearLayout 或 FrameLayout 等布局作为片段的容器,并在 onCreate 中制作类似
getFragmentManager().beginTransaction()
.add(R.id.menu_fragment, MenuFragment.getInstance())
.commit();
并将容器 ID 重命名为“@+id/fragmentContainer”或类似名称。
您不应创建两个片段,而应创建单个 FrameLayout(或任何其他)并在切换期间替换框架布局,如下例所示。
XML
<FrameLayout
android:id="@+id/frameContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Kotlin
fun replaceFragment(fragment:Fragment){
supportFragmentManager
.beginTransaction()
.replace(R.id.frameContainer, fragment)
.commit()
}
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();
}
在你的片段布局中xml添加背景颜色来解决问题