Ящик навигации отстает в 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();
        }
    }
Другие вопросы по тегам