片段backstack选择预片段问题

时间:2018-02-05 07:15:16

标签: android android-fragments back-stack fragment-backstack

我有底部导航并设置每个项目加载片段。当我的应用程序加载Home片段默认选中。我的应用程序片段Backstack在导航时工作,例如单击帖子>搜索>赞成并在按下它之后再回到Search>发布>首页但我的问题再次选择上一个片段,例如当导航Post>搜索>现在发布时按回第一次按下不工作而不回复任何片段,然后按回到主页。导航Post>时我想要这种格式的工作搜索>发布回传导航搜索>家。 我有pushFragments方法和Override onBackPressed。我的代码是:

pushFragments方法:

public void pushFragments(String tag, Fragment fragment){

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction fTransaction = manager.beginTransaction();

    if (manager.findFragmentByTag(tag)==null){
        fTransaction.add(R.id.frame_fragmentMain_container,fragment,tag);
        fTransaction.addToBackStack(tag);
    }


    Fragment homeFragment = manager.findFragmentByTag(TAG_FRAGMENT_HOME);
    Fragment postsFragment = manager.findFragmentByTag(TAG_FRAGMENT_POSTS);
    Fragment usersFragment = manager.findFragmentByTag(TAG_FRAGMENT_USERS);
    Fragment searchFragment = manager.findFragmentByTag(TAG_FRAGMENT_SEARCH);
    Fragment favorFragment = manager.findFragmentByTag(TAG_FRAGMENT_FAVOR);

    // Hide all Fragment
    if(homeFragment!=null){
        fTransaction.hide(homeFragment);
    }

    if(postsFragment!=null){
        fTransaction.hide(postsFragment);
    }
    if(usersFragment!=null){
        fTransaction.hide(usersFragment);
    }
    if(searchFragment!=null){
        fTransaction.hide(searchFragment);
    }
    if(favorFragment!=null){
        fTransaction.hide(favorFragment);
    }

    switch (tag){
        case TAG_FRAGMENT_HOME:
            if(homeFragment!=null){
                fTransaction.show(homeFragment);
                setToolbarTitle("Home Page");
                disableNavigationToolbarIcon();
            }
            break;

        case TAG_FRAGMENT_POSTS:
            if(postsFragment!=null){
                fTransaction.show(postsFragment);
                setToolbarTitle("Posts List");
                enabledNavigationToolbarIcon();
            }
            break;

        case TAG_FRAGMENT_USERS:
            if(usersFragment!=null){
                fTransaction.show(usersFragment);
                setToolbarTitle("Authors List");
                enabledNavigationToolbarIcon();
            }
            break;
        case TAG_FRAGMENT_SEARCH:
            if(searchFragment!=null){
                fTransaction.show(searchFragment);
                setToolbarTitle("Search Page");
                enabledNavigationToolbarIcon();
            }
            break;
        case TAG_FRAGMENT_FAVOR:
            if(favorFragment!=null){
                fTransaction.show(favorFragment);
                setToolbarTitle("Favor Posts");
                enabledNavigationToolbarIcon();
            }
            break;
    }


    fTransaction.commitAllowingStateLoss();
}

和覆盖onBackPressed:

    @Override
public void onBackPressed() {
    FragmentManager manager = getSupportFragmentManager();
    if(manager.getBackStackEntryCount()>1){
        for (Fragment fragment : manager.getFragments()){
            if(fragment.isVisible()){
                FragmentManager childManager = fragment.getChildFragmentManager();
                if(childManager.getBackStackEntryCount()>0){
                    if(fragment instanceof UsersFragment){
                        setToolbarTitle("Authors List");
                    }
                    childManager.popBackStack();
                    return;
                }
            }

        }
        manager.popBackStack();

    }else{
        new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface arg0, int arg1) {
                        finish();
                        moveTaskToBack(true);
                    }
                }).create().show();
    }
}

enter image description here

1 个答案:

答案 0 :(得分:3)

尝试一下..它一定会有效..

public void pushFragments(Fragment fragment) {

        try {
            String backStateName = fragment.getClass().getName();
            FragmentManager fragmentManager = getSupportFragmentManager();
            boolean fragmentPop = fragmentManager.popBackStackImmediate(backStateName, 0);
            if (!fragmentPop) {
                try {

                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.frame_layout, fragment);
                    fragmentTransaction.addToBackStack(backStateName);
                    fragmentTransaction.commit();
                } catch (Exception e) {

                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

并在OnBackPress ---

 @Override
    public void onBackPressed() {
        if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
            finish();
            return;
        }
        super.onBackPressed();
    }
相关问题