导航抽屉的行为异常

时间:2019-02-18 12:26:11

标签: java android navigation-drawer

所以我的情况是我正确地实现了导航抽屉(可以说,它正确显示并调用了方法(以一种怪异的方式,但会触发)),但是它的行为很怪异,我不知道该怎么做要做,但要问你窥视!

一旦我开始将方法绑定到抽屉的菜单项(选项)上,我就开始注意到奇怪的行为。首先让我用言语解释:

让它成为虚拟菜单:

This is how menu looks in real app

好吧,您会看到订单的顺序:主页-历史-收藏夹-注销

到目前为止,我已经实现了历史记录并且最喜欢这是我得到的行为:

  1. 如果我致电历史记录,它将正确打开活动并显示数据
  2. 如果我叫“收藏夹”,则我将首先打开“历史记录”,然后再打开“收藏夹”(我可以看到,因为当我按回它会关闭收藏夹时,会打开历史记录)
  3. 我已经将虚拟活动添加为菜单的第三项选项(未显示在图片上),并且我得到了相同的行为,但是这次,如果我单击虚拟活动,它将打开历史记录-收藏夹-虚拟。

在发布实现代码之前,还有一件事。 让我们进行2个矿山活动,并进行实时示例(所有示例均在同一目录中)。 1)在首页上,我尝试使用抽屉并调用历史记录/收藏夹,它运行良好,我输入搜索内容,在尝试使用抽屉中调用历史记录/收藏夹的收藏夹中,我按返回主活动(主页),按抽屉打开历史记录/收藏夹和puuf,它不再起作用了...知道连接了还是只是要解决的一个单独问题?

实施:

final NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // set item as selected to persist highlight
            menuItem.setChecked(true);
            // close drawer when item is tapped

            switch (menuItem.getItemId()) {

                case R.id.nav_home: {
                    if (checkInternetConnection(getApplicationContext())) {
                        Log.i(LOG_TAG, "PROVJERA NETA  POVEZAN");
                        start_loader();
                    } else {
                        mEmptyStateTextView.setText("Cannot connect to network, please check your network status and try again.");
                        // Clear the adapter of previous earthquake data

                    }
                }
                case R.id.nav_history: {
                    pozoviHistory(null);
                }
                case R.id.nav_favourite: {
                    pozoviFavorites();
                }

            }


            mDrawerLayout.closeDrawers();

            // Add code here to update the UI based on the item selected
            // For example, swap UI fragments here

            return true;
        }
    }
);

mDrawerLayout.addDrawerListener(
    new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            // Respond when the drawer's position changes
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            // Respond when the drawer is opened

        }

        @Override
        public void onDrawerClosed(View drawerView) {
            // Respond when the drawer is closed
            navigationView.getMenu().getItem(0).setChecked(true);

        }

        @Override
        public void onDrawerStateChanged(int newState) {
            // Respond when the drawer motion state changes
        }
    }
);

******编辑********

好的,所以从下面的答案中添加中断;解决每种情况下打开所有东西的问题。我设法找到了更多的症状,导致抽屉行事笨拙。

所以我正在做的使抽屉动作愚蠢的动作是:  -我的活动有一个使http请求并启动媒体播放器的线程。  -通过听众完成线程后,我将添加媒体播放器  -一旦初始化,我就用代表媒体播放器的某种布局来填充我的布局(这可能是制作抽屉哑巴的问题吗?) -同样从右向左滑动(用于关闭)不起作用,但是单击外部抽屉(在活动布局上)可以正常关闭

这就是我的充气方式:

  DrawerLayout myLayout = (DrawerLayout) findViewById(R.id.cili_test);
                View itemInfo1 = getLayoutInflater().inflate(R.layout.player2, myLayout, true);

1 个答案:

答案 0 :(得分:0)

您需要在交换机的情况下添加break;

赞:

switch (menuItem.getItemId()) {

            case R.id.nav_home: {
                if (checkInternetConnection(getApplicationContext())) {
                    Log.i(LOG_TAG, "PROVJERA NETA  POVEZAN");
                    start_loader();
                } else {
                    mEmptyStateTextView.setText("Cannot connect to network, please check your network status and try again.");
                    // Clear the adapter of previous earthquake data

                }
                break;
            }
            case R.id.nav_history: {
                pozoviHistory(null);
                break;
            }
            case R.id.nav_favourite: {
                pozoviFavorites();
                break;
            }

        }