Android DrawerLayout 滞后

Android DrawerLayout Lagging

DrawerLayout 需要很长时间才能关闭 这是我的代码:

            @Override
            public void onDrawerOpened(View drawerView) {

                   if (items.size() == 0)
                      view.setVisibility(View.GONE);
                   else view.setVisibility(View.VISIBLE);}

                super.onDrawerOpened(drawerView);
                invalidateOptionsMenu();

            }

有解决办法吗?

你包括了吗

actionBarDrawerToggle.syncState()

syncState() 到底做了什么?

嗯,ActionBarDrawerToggle.syncState() 会同步改变图标的​​状态,这取决于 DrawerLayout 的动作。如果您曾经尝试删除 syncState(),您会发现箭头图标将不再旋转。

您的问题是 onDrawerOpened() 方法在抽屉完全打开之前不会触发。感知到的延迟是由于 View 在打开期间可见。

一种解决方案是禁用拖动抽屉,只允许切换打开和关闭抽屉。然后,您可以在以编程方式打开它之前进行尺寸检查。但是,这需要在每个 onDrawerOpened()onDrawerClosed() 方法中将抽屉锁定到适当的状态,当然,您将失去标准的交互模式。

首选的选项可能是在抽屉开始打开时尽快进行检查和可见性设置。我们可以在 onDrawerSlide() 方法中执行此操作,保留一个 boolean 标志来确定抽屉在关闭后是否正在滑动。例如:

actionBarDrawerToggle = new ActionBarDrawerToggle(...) {
    private boolean opened;

    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
        super.onDrawerSlide(drawerView, slideOffset);

        if (slideOffset == 0) {
            opened = false;
        }
        else {
            if (!opened) {
                opened = true;
                if (items.size() == 0) {
                    view.setVisibility(View.GONE);
                }
                else {
                    view.setVisibility(View.VISIBLE);
                }
            }   
        }
    }

    ...
}