当前位置: 首页 > 知识库问答 >
问题:

导航抽屉插入主事件

管和志
2023-03-14

我使用下面的抽屉布局。所以我的片段附加到工具栏下面的框架布局。当我显示片段时,我将home按钮从humburger更改为箭头:

drawerToggle.setDrawerIndicatorEnabled(b);
getSupportActionBar().setDisplayHomeAsUpEnabled(show);

问题是-当我单击箭头按钮时,活动或片段中没有onOptionsItemSelec的事件。如果我没有使用抽屉oggle.set抽屉指示器启用(b);箭头按钮将打开抽屉菜单。如何修复这种行为?

布局

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:orientation="vertical">

        <include
            android:id="@+id/toolbar"
            layout="@layout/tool_bar" />

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/navigation_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start|center_vertical"
        android:background="@color/bg_drawer"

        android:clickable="true"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="138dip"
            android:layout_marginLeft="24dp"
            android:layout_marginTop="11dip"
            android:adjustViewBounds="true"
            android:src="@drawable/ic_drawer_logo" />

        <ListView
            android:id="@+id/navigation_drawer"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_marginTop="8dp"
            android:layout_weight="1"
            android:choiceMode="singleChoice"
            android:divider="@drawable/drawer_divider"
            android:dividerHeight="1dip"
            android:footerDividersEnabled="false"
            android:listSelector="@drawable/selector"
            android:paddingLeft="24dip"
            android:paddingRight="24dip" />
    </LinearLayout>

</android.support.v4.widget.DrawerLayout>

导航抽屉设置

public void setUpNavigationDrawer(){
        int width = getResources().getDisplayMetrics().widthPixels * 3 / 4;
        DrawerLayout.LayoutParams params =
            (android.support.v4.widget.DrawerLayout.LayoutParams) navigationHolder.getLayoutParams();
        params.width = width;
        navigationHolder.setLayoutParams(params);
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        drawerToggle = new ActionBarDrawerToggle(
            this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
        ){

            @Override
            public void onDrawerOpened(View drawerView){
                super.onDrawerOpened(drawerView);

                if(!mUserLearnedDrawer){
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(
                        mContext
                    );
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                }
                invalidateOptionsMenu();

            }


            @Override
            public void onDrawerSlide(View drawerView, float slideOffset){
                super.onDrawerSlide(drawerView, slideOffset);
            }


            @Override
            public void onDrawerClosed(View drawerView){
                super.onDrawerClosed(drawerView);
                if(needToChangePage){
                    onNavigationDrawerItemSelected(
                        (int) drawerView.getTag()
                    );
                }
                needToChangePage = false;

            }
        };

        if(!mUserLearnedDrawer){
            mDrawerLayout.openDrawer(navigationHolder);
        }
        mDrawerLayout.post(
            new Runnable(){

                @Override
                public void run(){
                    drawerToggle.syncState();
                }
            }
        );
        mDrawerLayout.setDrawerListener(drawerToggle);
    }

使用碎片时,在Android导航抽屉图像和插入符号之间切换尝试了从这里开始的方法,但结果相同


共有1个答案

贡正诚
2023-03-14

要收听点击android. R.id.home当抽屉菜单设置它的必要添加工具栏侦听器

drawerToggle.setToolbarNavigationClickListener(
            new View.OnClickListener(){

                @Override
                public void onClick(View v){
                    getSupportFragmentManager().popBackStackImmediate();
                }
            }
        );

此侦听器将只发,如果抽屉oggle.setDrawerIndicator启用(false);

 类似资料:
  • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

  • 实际上,我正在我的应用程序中使用新的架构组件,并且我已经设置了导航组件。我有一个导航抽屉,我想用它。我已经设置好了,但我面临一些问题: 1-抽屉不会自动关闭。菜单正常工作并导航到正确的位置,但导航后不会关闭。我必须添加一个目的地ChangedListener才能自己关闭它。 在代码实验室里,抽屉自动关闭,我真的不明白为什么。 2-向上按钮打开抽屉。当我导航到非顶级片段时,菜单图标变为向上箭头,但当

  • 我在将与和组合时遇到布局问题。 问题是,NavigationDrawer及其内容隐藏在工具栏后面。我已经做了很多研究,尝试了很多重组,但没有一个“解决方案”能解决我的问题。 在这个Webm小视频中可以找到一个演示:https://www.dropbox.com/s/i5zfc2x2ts2fws7/navigation_drawer_stackoverflow32523188.webm?dl=0 基

  • 有人知道如何实现一个滑动菜单像一些顶级应用程序今天吗? 其他堆栈溢出问题还没有关于如何做到这一点的答案,所以我正在尝试收集尽可能多的信息来帮助其他人。我在下面提到的所有应用程序都很好地实现了幻灯片菜单。 只有点击左上角的G+标识,才能从第一屏进入第二屏。注意,整个屏幕从它的位置移动,并且get被推到屏幕的右侧(包括操作栏)。要回到第一个屏幕,您可以将右侧滑回焦点,也可以再次单击G+图标。 您可以使

  • 我有一个程序,我想实现一个滑动菜单。 首先,我尝试了导航抽屉导航抽屉,这是我想要的,因为: 1)它不推屏幕,它覆盖它2)当我点击按钮上左它打开菜单3)当我尝试点击屏幕上的另一个 我不想有一个按钮向上左边,我希望用户点击一个按钮从屏幕和每次不同的滑动菜单出现。 我也尝试了jfeinstein10滑动菜单,但它不覆盖屏幕,它只是推开它,他们告诉我,这是不可能改变的。但另一方面,它是容易的,在某些方面更

  • 问题内容: 我正在创建一个包含导航抽屉活动的应用程序。我正在主屏幕中加载不同的片段。现在,当我当时必须调用Fragment时,它可以正常工作,但是当我想调用某种服务(如call,图像选择器)时,我添加了setNavigationItemSelectedListener,它工作正常,但其他所有片段现在都无法加载。 问题答案: 当您打电话时,是说您要处理NavigationView中的单击事件,并根据