在项目中 有各种各样的需求,我今天就遇到一个这种需求侧滑菜单
当我们在应用NavigationView+DrawerLayout的时
点击完Menu Drawer进行关闭的同时activity也在打开 我发现这样做效果不是很好有掉帧的情况 出现卡顿
开始我以为是activity create里面操作延迟比较久 后来注释所有的方法后发现有一点卵用 但是还是有延迟
仔细看图就会发现当drawer回收一半activity就出来了 所以我考虑将选中事件的操作放到drawer close 之后进行 下面 是之前的操作选中后关闭跳转
/*记录点击那个按钮*/
public int flag;
NavigationView.OnNavigationItemSelectedListener navListener = new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
//关闭drawer
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawers();
}
int id = item.getItemId();
switch (id) {
case R.id.nav_advanced:
flag = id;
break;
case R.id.nav_appmanager:
flag = id;
break;
case R.id.nav_photo:
flag = id;
myStartActivity(CleanActivityNew.this,PhotoCleanActivity.class);
break;
case R.id.nav_noti:
flag = id;
break;
case R.id.nav_cpu:
flag = id;
break;
case R.id.nav_device:
flag = id;
break;
case R.id.nav_lock:
flag = id;
break;
}
// DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
return true;
}
};
现在的操作是给drawerlayout 设置监听事件 close 之后执行操作 上代码
/*记录点击那个按钮 以便于在 drawerlayout close 中区分点击位置*/
public int flag;
NavigationView.OnNavigationItemSelectedListener navListener = new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
//关闭drawer
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawers();
}
int id = item.getItemId();
switch (id) {
case R.id.nav_advanced:
flag = id;
break;
case R.id.nav_appmanager:
flag = id;
break;
case R.id.nav_photo:
flag = id;
break;
case R.id.nav_noti:
flag = id;
break;
case R.id.nav_cpu:
flag = id;
break;
case R.id.nav_device:
flag = id;
break;
case R.id.nav_lock:
flag = id;
break;
}
// DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
return true;
}
};
在NavigationView设置完监听之后 给DrawaerLayout 设置事件
navigationView.setNavigationItemSelectedListener(navListener);//绑定menu的点击事件
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
switch (flag) {
case R.id.nav_advanced:
//逻辑操作 myStartActivity(CleanActivityNew.this,DepthcleanupActivity.class);
break;
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
效果如下
感谢http://m.blog.youkuaiyun.com/qq_33705491/article/details/52200006