我在使用Navigation Drawer时遇到问题,它太慢了,我要寻找的解决方案是先关闭抽屉,然后显示活动,但它不起作用,肯定是我遗漏了一些东西。
private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int posicao, long id) { setLastPosition(posicao); setFragmentList(lastPosition); layoutDrawer.closeDrawer(linearDrawer); } } private OnClickListener userOnClick = new OnClickListener() { @Override public void onClick(View v) { layoutDrawer.closeDrawer(linearDrawer); } }; private void setFragmentList(int posicao) { FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragment = new FragmentViagens(); switch (posicao) { case 0: fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); break; case 1: fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentPedidos()).commit(); break; case 2: fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentClientes()).commit(); break; } navigationAdapter.setChecked(posicao, true); setTitleFragments(lastPosition); navigationAdapter.resetarCheck(); layoutDrawer.closeDrawer(linearDrawer); }
您可以通过这种方式来避免抽屉滞后,更改 onItemClick :
layoutDrawer.closeDrawer(linearDrawer); setLastPosition(posicao); new Handler().postDelayed(new Runnable() { @Override public void run() { setFragmentList(lastPosition); } }, 200);
编辑: 首选方式应该是在DrawerLayout上设置DrawerListener,然后onDrawerClosed 像这样设置片段:
onDrawerClosed
Fragment mFragmentToSet = null; @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // Handle navigation view item clicks here. switch (item.getItemId()) { case R.id.nav_home: mFragmentToSet = HomeFragment.newInstance(); break; } mDrawerLayout.closeDrawer(GravityCompat.START); return true; }
mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) {} @Override public void onDrawerOpened(View drawerView) {} @Override public void onDrawerStateChanged(int newState) {} @Override public void onDrawerClosed(View drawerView) { //Set your new fragment here if (mFragmentToSet != null) { getSupportFragmentManager() .beginTransaction() .replace(FRAGMENT_CONTAINER_ID, mFragmentToSet) .commit(); mFragmentToSet = null; } } });