【问题标题】:Checked state for icon is wrong in NavigationView after closing and opening drawer关闭和打开抽屉后,导航视图中图标的检查状态错误
【发布时间】:2015-06-03 10:05:59
【问题描述】:

我已经尝试从 Android 支持设计库中实现新的 NavigationView。该应用程序由一个 DrawerLayout 和一个带有 NavigationView 的 Fragment 组成。带有图标的简单菜单。

  1. 我正在启动应用程序,但没有检查任何项目。

  2. 然后我点击一个项目,该项目被选中,文本和图标都显示为选中状态:

  3. 然后我通过滑动打开和关闭抽屉。现在发生的情况是,我选择的项目的文本显示选择状态,但图标没有。另一方面,上面的项目具有显示选中状态的图标。

这是一个错误还是我做错了什么?

我的项目带有应用截图可以在这里查看:

https://bitbucket.org/adirdal/navigationviewtest

【问题讨论】:

  • 这不是一个真正的问题。假设你在问,“世界上有完美的人吗?”当然,你会回答 NO。
  • 我同意,我已经更新了标题

标签: android androiddesignsupport navigationview


【解决方案1】:

解决办法是把NavigationView直接放到DrawerLayout里面,而不是放在Fragment里面。

【讨论】:

  • 我尝试将导航视图放在抽屉布局下的相对布局中,但仍然面临同样的问题......
【解决方案2】:

面临与您相同的问题...(我已从片段中删除导航视图)。 这个解决方案对我有用。 您可以尝试不从片段中删除导航视图。

试试这个结构:

public your class
{
private int mNavItemId;
private static final String NAV_ITEM_ID = "navItemId";
onCreate()
{
      if (null == savedInstanceState) {
            mNavItemId = R.id.home;
        } else {
            mNavItemId = savedInstanceState.getInt(NAV_ITEM_ID);
        }

        //call setupnavigationview
        setupnavigationview();
}

private void setupNavigationView() {

        mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
        mNavigationView.getMenu().findItem(mNavItemId).setChecked(true);
        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                // update highlighted item in the navigation menu
                menuItem.setChecked(true);
                mNavItemId = menuItem.getItemId();
                mDrawerLayout.closeDrawer(GravityCompat.START);

                    switch (menuItem.getItemId()) {
                    case R.id.id_of_your_menu_item:
                        call your fragment
                        break;

                });

                }

                @Override
    protected void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(NAV_ITEM_ID, mNavItemId);
    }
    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {
        if (item.getItemId() == android.support.v7.appcompat.R.id.home) {
            return mDrawerToggle.onOptionsItemSelected(item);
        }
        return super.onOptionsItemSelected(item);
    }
}           

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多