java - 如何隐藏所有其他 fragment

标签 java android android-fragments

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

目前我添加了一个选项菜单,如果选择了一个项目,则会显示一个新 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/

相关文章:

java - 尝试删除用户定义的双向链表中特定位置的元素

java - Java 中最快的变量集

java - 如何在ActionBar中创建二级下拉列表?

java - android - 如何在已经膨胀的布局中膨胀 map fragment ?

android - 在 Fragment android 中实现 AsyncTask

java - 如何将函数式编程语言集成到 Java 或 C# 中?

java - 在不使用匹配验证的情况下自动恢复 Wildfly 8.2 for Oracle 中的连接

java - Android 文本转语音按钮点击问题

android UI Material 风格

android - 未能找到 'ContentProvider' 的提供商信息