android - 按下项目后如何立即关闭抽屉导航?

标签 android navigation drawer

我使用的抽屉导航工作正常,但在按下某个项目后它会缓慢关闭。如果下一个 Activity 在 oncreate 方法中有额外的代码,否则会正常工作,就会发生这种情况。

所以请帮忙解决这个问题

最佳答案

我刚刚设法解决了您遇到的问题。

首先我不得不说我正在处理 Android Studio 1.1.0 生成的 NavigationDrawer 项目。

这是NavigationDrawerFragment类的方法onCreateView()

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);

    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            selectItem(position);
        }
    });

    mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1,
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
            }));

    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

    return mDrawerListView;
}

当一个项目被点击时

mDrawerListView.setOnItemClickListener()

回调将触发,然后球传给

selectItem(position)

方法。

“selectItem()”方法隐藏了 NavigationDrawer,并使用回调调用“MainActivity”类中的一个方法 -onNavigationDrawerItemSelected()- 开始过渡到所选 fragment .

动画卡顿/滞后的发生是因为代码试图关闭 NavigationDrawer 并同时完成 UI 布局核心工作。

如果你想避免滞后,你必须选择先做什么。

在我自己的解决方法中,我决定:

  1. 关闭抽屉导航
  2. 完成 UI(布局)工作

这是我自己的解决方案:

mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        final int pos = position;

        mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener(){
            @Override
            public void onDrawerClosed(View drawerView)
            {
                super.onDrawerClosed(drawerView);
                selectItem(pos);
            }
        });

        mDrawerLayout.closeDrawer(mFragmentContainerView);
    }
});

不要被代码搞糊涂了。

我们将 selectItem(pos) 移动到回调中,只有在抽屉关闭时才会触发该回调,然后我们强制关闭抽屉,这样魔法就可能发生了。

这个解决方案对我有用,希望知道它是否也对你有用。

关于android - 按下项目后如何立即关闭抽屉导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229778/

相关文章:

android - 无法写入 SD 卡

navigation - 如何在 vuetify 主抽屉/导航中创建子菜单

android - fragment 未显示在 ActionBar 下方的 MenuDrawer

android - 在没有 TitleBar 或 ActionBar 的情况下使用 Navigation Drawer

ios - 更改 'More' 选项卡的导航栏色调颜色

java - 启动时打开抽屉导航

java - 尝试使用泛型延迟加载 android View

android - 为什么 "Avoid Enums Where You Only Need Ints"从 Android 的性能提示中删除?

android - 获取文件路径而不用 flutter 将文件加载到内存中?

react-native - 结合 TabNavigator 和 Drawernavigator