Android DrawerLayout滞后

时间:2017-01-24 12:12:04

标签: android performance drawerlayout

DrawerLayout需要花费很长时间才能完成 这是我的代码:

            @Override
            public void onDrawerOpened(View drawerView) {

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

                super.onDrawerOpened(drawerView);
                invalidateOptionsMenu();

            }

有解决方案吗?

2 个答案:

答案 0 :(得分:1)

您的问题是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);
                }
            }   
        }
    }

    ...
}

答案 1 :(得分:0)

包括

actionBarDrawerToggle.syncState()

syncState()究竟做了什么?

好吧,ActionBarDrawerToggle.syncState()将同步更改后的图标的状态,这会影响DrawerLayout的操作。如果您曾尝试删除syncState(),您将意识到箭头图标不再旋转。