簡體   English   中英

在Android中打開或關閉片段時導航抽屜落后於Android

[英]Navigation drawer lags in Android when opening or closing fragment in 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);
        }
    }

我已經將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM