如何隐藏所有其他片段

时间:2014-09-07 16:49:46

标签: java android android-fragments

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

目前我添加了一个optionmenu,如果选择了一个项目,则会显示一个新的片段。谢谢你的工作。

我的问题是游戏片段永远不会被破坏。只有隐藏。

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

这是我的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" />

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

那么..有没有办法隐藏除新的片段之外的每个片段?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

SELECT product.name, AVG(product.product_price) 
from product 
    inner join orderline on product.product_id = orderline.product_id
    inner join orders on orderline.order_id = orders.order_id 
    inner join  customer on orders.cust_id = customer.cust_id
WHERE  customer.city LIKE 'Tuscon'
group by product.name