DrawerLayout需要花费很长时间才能完成 这是我的代码:
@Override
public void onDrawerOpened(View drawerView) {
if (items.size() == 0)
view.setVisibility(View.GONE);
else view.setVisibility(View.VISIBLE);}
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
有解决方案吗?
答案 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(),您将意识到箭头图标不再旋转。