【问题标题】:I changed toolbar hamburger icon but it does not open drawer menu when I clicked我更改了工具栏汉堡图标,但单击时它没有打开抽屉菜单
【发布时间】:2015-05-13 15:15:30
【问题描述】:

我使用的是 android 工具栏而不是操作栏,如下面的代码所示。我用我的客户想要的东西改变了汉堡包图标。但是当我点击图标时抽屉菜单没有打开。这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    toolbar=(Toolbar)findViewById(R.id.tool_bar);
    toolbar.inflateMenu(R.menu.menu_event_list);
    toolbar.setNavigationIcon(R.drawable.icon_menu);
    toolbar.setOnMenuItemClickListener(menuClicked);
    toolbar.setTitle(getResources().getString(R.string.app_name));

    mRecyclerView=(RecyclerView)findViewById(R.id.RecyclerView);
    mRecyclerView.setHasFixedSize(true);

    mAdapter=new MenuAdapter(titles,icons,u.fullName,u.email,R.drawable.a,this);
    mRecyclerView.setAdapter(mAdapter);

    mLayoutManager=new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);

    Drawer=(DrawerLayout)findViewById(R.id.DrawerLayout);
    mDrawerToggle=new ActionBarDrawerToggle(this,Drawer,toolbar,R.string.app_name,R.string.app_name){
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            // code here will execute once the drawer is opened( As I dont want anything happened whe drawer is
            // open I am not going to put anything here)
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            // Code here will execute once drawer is closed
        }
    };
    mDrawerToggle.setHomeAsUpIndicator(R.drawable.icon_menu);
    mDrawerToggle.setDrawerIndicatorEnabled(false);
    Drawer.setDrawerListener(mDrawerToggle);
    mDrawerToggle.syncState();
}

和 xml

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

</RelativeLayout>
<android.support.v7.widget.RecyclerView
    android:id="@+id/RecyclerView"
    android:layout_width="280dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:background="#ffffff"
    android:scrollbars="vertical">

</android.support.v7.widget.RecyclerView>

【问题讨论】:

    标签: android navigation-drawer android-toolbar slidingdrawer


    【解决方案1】:

    根据ActionBarDrawerToggledocumentation

    syncState() 应在 DrawerLayout 的实例状态恢复后以及状态可能发生分歧的任何其他时间从 Activity 的 onPostCreate 方法中调用以进行同步。

    考虑在状态稳定后将您的呼叫转移到 syncState()onPostCreate

    【讨论】:

    • 我更新了代码。它已经在 onCreate 中了。我正在寻找 onPostCreate
    • 当我在 onPostCreate 内执行此操作时,它会给出 nullPointerException,这是一点点错误 05-13 19:35:21.141 22946-22946/com.mobigo.apps.mobiticket E/AndroidRuntime: 致命例外:主进程:com.mobigo.apps.mobiticket,PID:22946 java.lang.NullPointerException at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764) at android.view.View.measure(View.java :16521) 在 android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:883)
    • 我解决了这个错误,但是当我点击更改后的图标时它仍然没有打开导航抽屉
    【解决方案2】:

    在 Activity 中缺少一些覆盖

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
          return true;
        }
    
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多