gpt4 book ai didi

java - 如何隐藏所有其他 fragment

转载 作者:行者123 更新时间:2023-12-04 18:06:21 26 4
gpt4 key购买 nike

只是为了编码练习,我正在创建一个小游戏。

目前我添加了一个选项菜单,如果选择了一个项目,则会显示一个新 fragment 。感谢工作顺利。

我的问题是游戏 fragment 永远不应该被破坏。仅隐藏。

如果我在下面使用我的代码,两个框架(关于和帮助)可以同时存在。但是,如果我在 R.id.container 上使用替换,游戏 fragment 将停止(那里有一个计时器)。

这是我的 Java 代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActionBar().setDisplayHomeAsUpEnabled(false);
getActionBar().setHomeButtonEnabled(false);

getFragmentManager().popBackStack();

return true;

case R.id.action_about:
if (getFragmentManager().findFragmentByTag("about_fragment") == null) {
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);

// Gets the game fragement so it can be hidden
Fragment fragment = getFragmentManager().findFragmentByTag("game_fragment");

getFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(R.id.container, new AboutFragment(), "about_fragment")
.hide(fragment)
.addToBackStack("about_fragment")
.commit();

return true;
}

return true;

case R.id.action_help:
if (getFragmentManager().findFragmentByTag("help_fragment") == null) {
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);

// Gets the game fragement so it can be hidden
Fragment fragment = getFragmentManager().findFragmentByTag("game_fragment");

getFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(R.id.container, new HelpFragment(), "help_fragment")
.hide(fragment)
.addToBackStack("help_fragment")
.commit();

return true;
}

return true;

default:
return super.onOptionsItemSelected(item);
}

这是我的带有容器的 XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DoNothingGame"
tools:ignore="MergeRootFrame" />

我可以在 switch 中询问是否显示其他 fragment 并隐藏它们,但我认为如果我使用例如 10 或 20 个菜单项,代码会爆炸很多。

那么..有没有办法隐藏除新 fragment 之外的所有 fragment ?

感谢您的帮助!

最佳答案

也许有点晚了,但我设法像这样实现它:

    FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

for (Fragment frag : fm.getFragments()){
ft.hide(frag);
}

ft.commit();

关于java - 如何隐藏所有其他 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25712595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com