有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何隐藏所有其他片段

为了练习编码,我正在制作一个小游戏

目前我添加了一个选项菜单,如果选择了一个项目,就会显示一个新的片段。谢谢,很好

我的问题是,游戏碎片永远不应该被销毁。只是隐藏

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

以下是我的Java代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case 安卓.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:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:id="@+id/container"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context=".DoNothingGame"
tools:ignore="MergeRootFrame" />

我可以在开关中的每种情况下询问是否显示并隐藏了其他片段,但我认为如果我使用10或20个菜单项,代码会爆炸很多

所以。。有没有办法隐藏每一个片段,除了新的

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    也许有点晚了,但我还是这样实施了:

        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
    
        for (Fragment frag : fm.getFragments()){
            ft.hide(frag);
        }
    
        ft.commit();