繁体   English   中英

工具栏中的导航MenuItem不会触发onOptionsItemSelected

navigation MenuItem in toolbar doesn't trigger onOptionsItemSelected

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用带有工具栏的导航抽屉,但是按下导航按钮不会触发onOptionsItemSelected处理程序,并且列表不会打开。

但是,搜索按钮会触发onOptionsItemSelected。

这是我的代码和xml:

编辑:也不调用onDrawerClosed()和onDrawerOpened()

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

mToolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(mToolbar);

mAdapter =  new ViewPagerAdapter(getSupportFragmentManager(),Titles, numOfTabs);

// Assigning ViewPager View and setting the adapter
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);

// Assigning the Sliding Tab Layout View
mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
mTabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width

mTabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
    @Override
    public int getIndicatorColor(int position) {
        return getResources().getColor(R.color.augury_white);
    }
});

// Setting the ViewPager For the SlidingTabsLayout
mTabs.setViewPager(mPager);

// Set navigation drawer
mPlanetTitles = getResources().getStringArray(R.array.planets_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);

// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            mToolbar , R.string.drawer_open, R.string.drawer_close) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            syncState();
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            syncState();
        }
    };

// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);

}

activity_main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <include
        android:id="@+id/tool_bar"
        layout="@layout/tool_bar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />

    <com.augury.mobile.auguryandroid.SlidingTabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:elevation="2dp"
        android:background="@color/augury_blue"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_weight="1">

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>

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

</LinearLayout>

谢谢!!

3 个回复

试试这个布局:

<android.support.v4.widget.DrawerLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   tools:context=".MainActivity"
   >

   <LinearLayout 
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
   >

  <include
    android:id="@+id/tool_bar"
    layout="@layout/tool_bar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    />

  <com.augury.mobile.auguryandroid.SlidingTabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="2dp"
    android:background="@color/augury_blue"/>

  <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_weight="1">
  </android.support.v4.view.ViewPager>

</LinearLayout>

<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#111"/>

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

这对我有用:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relative"
    android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context=".MainActivity">

    <include
        android:id="@+id/tool_bar"
        layout="@layout/tool_bar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/tool_bar">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <com.augury.mobile.auguryandroid.SlidingTabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:elevation="2dp"
                android:background="@color/augury_blue"/>

            <android.support.v4.view.ViewPager
                android:id="@+id/pager"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:layout_weight="1">
            </android.support.v4.view.ViewPager>

        </LinearLayout>

        <!-- The navigation drawer -->
        <ListView android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#111"/>

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

</RelativeLayout>

写这个

  getSupportActionBar().setDisplayShowHomeEnabled(true);

在您设置工具栏之后

并删除

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

如果你有任何可能会给你一个意想不到的行为,这将带你到上一个任务

1 获取工具栏中的MenuItem的ID

我有一个带有以下代码的“菜单”资源“ menu_test”: 在我的activity.java文件中,将“ onCreate”函数中的工具栏膨胀,并添加一个点击侦听器: 我想获取“ hideshow”的ID并更改图标: 但是在第一行获取ID时,应用崩溃。 在点击侦听器功 ...

2016-10-14 21:04:44 2 3311   android
2 工具栏菜单 onOptionsItemSelected 在片段中不起作用

当用户使用导航组件单击工具栏中的菜单时,我试图更改当前片段,但是我根本无法从片段中获取菜单! 我使用带有 2 个片段的底部导航栏,每个片段都有不同的工具栏菜单项,我没有使用导航抽屉。 这是 HomeFragment.kt 的一个小片段: 它甚至不显示我指定的 Toast。 有人可以帮助我吗? 提 ...

3 工具栏MenuItem错误

我试图将“购物篮”图标设置为“添加到购物车”功能。 当我运行应用程序时,出现此错误 尝试在空对象引用上调用虚拟方法'android.view.View android.widget.RelativeLayout.findViewById(int)' 在这里,我正在使用AppC ...

5 工具栏显示在导航栏中

工具栏未显示在导航栏中的主布局中。 这是我尝试过Everythig的app_ba.xml布局,但找不到该问题的解决方案。 改变布局和每件事。 activity_main.xml navigation_header.xml ...

6 AppCompat 工具栏上的 MenuItem 着色

当我将AppCompat库中的可绘制对象用于我的Toolbar菜单项时,着色按预期工作。 像这样: 但是,如果我使用自己的可绘制对象,或者实际上甚至将可绘制对象从AppCompat库复制到我自己的项目中,它根本不会着色。 AppCompat Toolbar是否有一些特殊的魔法只为该库中的可 ...

7 在Android工具栏上更改MenuItem的样式

我正在为应用程序actionbar使用android toolbar 。 它具有一个带有2个MenuItems的操作按钮,如下所示: 现在,我试图更改MenuItems的样式以表示如下内容: 但是我只能使用此样式作为工具栏的主题android:theme="@style ...

9 工具栏及其上的导航

该项目具有工具栏的活动。 动态变化的片段中的活动。 根据片段应更改内容的工具栏。 转到第二个片段应该出现在工具栏中的nazat箭头中,该箭头会返回到上一个片段。 在主动从开始显示MainFragment。 在第二个活动中,我使用以下代码: 出现了“向上”箭头,但是当我单击 ...

10 处理工具栏onOptionsItemSelected上的侦听器-android

我的工具栏有一个单选按钮组(带有2个单选按钮)和一个按钮。 我可以通过在onOptionsItemSelected方法上使用item.getItemId() == R.id.button来轻松处理按钮单击,但是当我在无线电组中使用它时,它永远不会运行。 (例如: item.getItemId ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM