【问题标题】:Navigation drawer hamburger icon not showing up with v7 ActionBarDrawerToggle导航抽屉汉堡图标未随 v7 ActionBarDrawerToggle 一起显示
【发布时间】:2016-08-17 08:26:13
【问题描述】:

我一直在尝试为现有应用创建导航抽屉。我为此找到了一些教程,但其中大部分(包括official Android guide)似乎适用于已弃用的 v4 ActionBarDrawerToggle 库。我正在尝试改用 v7 库,但我的 ActionBarDrawerToggle 似乎并没有像documentation 所说的那样做。

编辑:根据以下答案修改了我的代码。汉堡图标现在可以正确地来回切换,但是当用户点击硬件后退按钮返回到我的应用程序的主要片段时,汉堡图标完全消失了。为什么会这样?

private void addDrawerItems() {
    String[] itemArray = {"About", "Nearby", "Settings", "Feedback",};
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemArray);
    mDrawerList.setAdapter(mAdapter);
    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("ContributionsActivity", "Item " + position + " selected");
        }
    });
}

private void setupDrawer() {
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

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

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

    mDrawerToggle.setDrawerIndicatorEnabled(true);
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.title_activity_contributions);
    setContentView(R.layout.activity_contributions);

    //Set up navigation drawer
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)findViewById(R.id.drawer_list);
    addDrawerItems();
    setupDrawer();
    ...
    }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // enabling drawer toggle by clicking on the app icon.
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else {
        switch (item.getItemId()) {
            case android.R.id.home:
                if (mediaDetails.isVisible()) {
                    getSupportFragmentManager().popBackStack();
                }
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

【问题讨论】:

标签: android navigation-drawer hamburger-menu android-appcompat


【解决方案1】:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

您缺少同步状态,添加它,一切都会好起来的。

【讨论】:

  • 哦,哇,谢谢!当最短时间允许我接受答案时:)
  • 哦,错了,现在还有一个问题 - 当用户在任何时候点击硬件返回按钮,然后返回到主片段,汉堡图标就会消失。为什么会发生这种情况?
  • 根据您的活动/片段层次结构可能是特定情况。尝试此链接中的解决方案:stackoverflow.com/questions/17258020/… mDrawerToggle.setDrawerIndicatorEnabled(false); ?
  • 啊,那个链接非常有用,解决了我的另一个问题,但我什至没有在其他片段中调用 mDrawerToggle.setDra‌​werIndicatorEnabled(false) 所以很遗憾它不能解决这个问题.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 2015-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多