如何在嵌套片段之间切换

时间:2014-10-04 00:36:39

标签: android fragment

我有两个片段和一些嵌套片段。我希望当我在这两个片段之间切换时,它会在childfragmentmanager的backstack顶部显示嵌套片段。 但是当我尝试显示它。 活动onBackPressed()方法

@Override
public void onBackPressed()
{
     FragmentManager fm = getSupportFragmentManager();
     for (Fragment frag : fm.getFragments()) 
     {
            if (frag!=null && frag.isVisible()) 
            {
                FragmentManager childFm = frag.getChildFragmentManager();
                if (childFm.getBackStackEntryCount() > 0) 
                {
                    childFm.popBackStack();
                    return;
                }
                else
                {
                    if(type==1)
                    {
                        ((FragmentBottomBarCustomer)getSupportFragmentManager().findFragmentByTag("FragmentBottomBarCustomer")).onBackPressed();
                         return;

                    }
                    else
                    {
                        ((FragmentBottomBarShop)getSupportFragmentManager().findFragmentByTag("FragmentBottomBarShop")).onBackPressed();
                         return;

                    }
                }
            }
        }
        super.onBackPressed();
}

切换器onBackPressed()方法

public void onBackPressed()
    {
        if(listMainFragment.size()==1)
        {
            getActivity().finish(); 
        }
        else if(listMainFragment.size()>1)
        {
           listMainFragment.pop();
           currentFragment=listMainFragment.peek().getClass().getName().substring(listMainFragment.peek().getClass().getName().lastIndexOf(".")+1);        
           if(listMainFragment.peek().getChildFragmentManager().getBackStackEntryCount()>0)
           {
               FragmentTransaction ft=listMainFragment.peek().getChildFragmentManager().beginTransaction();
               ft.replace(R.id.frame_child,getCurrentFragment(listMainFragment.peek().getChildFragmentManager()));
               ft.commit(); 
           }
           else
           {
               FragmentTransaction ft=getActivity().getSupportFragmentManager().beginTransaction();
               ft.replace(R.id.frame_container,listMainFragment.peek());
               ft.commit();
               setselected();
           }  
        }
        else
        {
           getActivity().finish();  
        }
    }

它给我这个错误

10-04 04:22:09.992: E/AndroidRuntime(31615): FATAL EXCEPTION: main
10-04 04:22:09.992: E/AndroidRuntime(31615): java.lang.IllegalStateException: No activity
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.os.Handler.handleCallback(Handler.java:725)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.os.Looper.loop(Looper.java:137)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at android.app.ActivityThread.main(ActivityThread.java:5283)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at java.lang.reflect.Method.invokeNative(Native Method)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at java.lang.reflect.Method.invoke(Method.java:511)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
10-04 04:22:09.992: E/AndroidRuntime(31615):    at dalvik.system.NativeStart.main(Native Method)

0 个答案:

没有答案