Ящик навигации отстает в Android при открытии или закрытии фрагмента в Android
Я сделал один проект, в котором есть навигационный ящик, и когда я открываю любой фрагмент из расширяемого списка, ящик зависает на 2-3 секунды, а затем показывает новый фрагмент.
У кого-нибудь есть идеи по этому поводу?
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);
}
}
1 ответ
Я добавил метод 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();
}
}