[英]Navigation drawer lags in Android when opening or closing fragment in Android
I have made one project having navigation drawer in it and when I open any fragment from the expandable listview, the drawer hangs for 2 to 3 seconds and than show the new fragment. 我已经制作了一个带有导航抽屉的项目,当我从可扩展列表视图中打开任何片段时,抽屉会挂起2到3秒而不是显示新片段。
Does anyone having any idea about this? 有没有人对此有任何想法?
HomeActivity.java HomeActivity.java
private void setFragment(int grpPos, int childPos, String fragmentName, boolean isDrawerToBeClosed) {
try {
imgHome.setVisibility(View.GONE);
switch (grpPos) {
case 0:
callHomeFragment();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void callHomeFragment() {
try {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragmentExisting = fragmentManager.findFragmentByTag(
getResources().getString(R.string.menu_home));
if (fragmentExisting != null) {
Fragment Home = fragmentManager.findFragmentByTag(getResources().getString(R.string.menu_home));
if (fragmentExisting.equals(Home)) {
Fragment fragment2 = new HomeFragment();
fragmentManager.beginTransaction().replace(R.id.fragment_content_frame, fragment2,
getResources().getString(R.string.menu_home)).commit();
}
showFragment(fragmentExisting, fragmentManager);
drawer.closeDrawer(GravityCompat.START);
} else {
Fragment fragment = new HomeFragment();
fragmentManager.beginTransaction().replace(R.id.fragment_content_frame, fragment,
getResources().getString(R.string.menu_home)).commit();
drawer.closeDrawer(GravityCompat.START);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void showFragment(Fragment fragmentExisting, FragmentManager fragmentManager) {
FragmentManager fragmentManagerInternal = getSupportFragmentManager();
for (int i = 0; i < fragmentManagerInternal.getBackStackEntryCount(); ++i) {
fragmentManagerInternal.popBackStack();
}
fragmentManagerInternal.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
try {
List<Fragment> fragments = fragmentManager.getFragments();
if (fragments != null && fragments.size() > 0) {
for (int i = 0; i < fragments.size(); i++) {
if (fragments.get(i) != null) {
fragmentManager.beginTransaction().hide(fragments.get(i)).commit();
}
}
}
fragmentManager.beginTransaction().show(fragmentExisting).commit();
} catch (Exception exception) {
// ((MyApplication) getApplicationContext()).printStackTrace(exception);
}
}
I have added postdelayed method to my fragment call and it works fine. 我已经将postdelayed方法添加到我的片段调用中,它工作正常。
private void setFragment(int grpPos, int childPos, String fragmentName, boolean isDrawerToBeClosed) {
try {
imgHome.setVisibility(View.GONE);
switch (grpPos) {
case 0:
runnableCode = new Runnable() {
@Override
public void run() {
callHomeFragment();
}
};
handler.postDelayed(runnableCode, 200);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.