2014-10-27 58 views
0

我正在一个项目中有很多片段连接到一个片段管理器。我想在我的片段活动中实现onbackpressed方法,以便我可以回到以前的片段。使用onbackpressed()时使用片段包含地图片段

的onbackpressedcode如下所示:

public void onBackPressed() { 

       int count = getSupportFragmentManager().getBackStackEntryCount(); 

       if (count == 0) { 
        super.onBackPressed(); 
        //additional code 
       } else { 


        getSupportFragmentManager().popBackStackImmediate(); 
       } 

      } 

的问题是,有在fragment.There之一supportmapfragment在该片段列表视图。当我需要我的列表视图中单击某个项到包含details.When另一个片段我按回到我得到一个IllegalStateException如下图所示:

10-27 13:31:26.039: E/AndroidRuntime(15458): FATAL EXCEPTION: main 
10-27 13:31:26.039: E/AndroidRuntime(15458): android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at com.igloo.fragments.ViewjobsFragment.onCreateView(ViewjobsFragment.java:123) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:764) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1527) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:494) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at com.igloo.marinaretail.UserMain.onBackPressed(UserMain.java:476) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.app.Activity.onKeyUp(Activity.java:1898) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.KeyEvent.dispatch(KeyEvent.java:1280) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.app.Activity.dispatchKeyEvent(Activity.java:2078) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1705) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2626) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2601) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.ViewRoot.handleMessage(ViewRoot.java:1873) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.os.Looper.loop(Looper.java:130) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.app.ActivityThread.main(ActivityThread.java:3689) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at java.lang.reflect.Method.invokeNative(Native Method) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at java.lang.reflect.Method.invoke(Method.java:507) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at dalvik.system.NativeStart.main(Native Method) 
10-27 13:31:26.039: E/AndroidRuntime(15458): Caused by: java.lang.IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f06005e, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:296) 
10-27 13:31:26.039: E/AndroidRuntime(15458): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
10-27 13:31:26.039: E/AndroidRuntime(15458): ... 26 more 

如何防止上述问题的紧迫回来。

此外,在包含地图,我有下面的代码片段的方法的OnDestroy:

@Override 
    public void onDestroy() { 

     SupportMapFragment f = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 
     if (f.isResumed()){ 
      getActivity().getSupportFragmentManager().beginTransaction().remove(f).commit(); 
     } 

     super.onDestroy(); 
    } 

如何解决回压问题?

有没有办法检查堆栈中的前一个片段是否是包含supportmap的片段?

+0

试试这个帮助我http://stackoverflow.com/questions/20919048/android-android-view-inflateexception-binary-xml-file-line-8-error-inflatin/41381507#41381507 – 2016-12-29 14:24:07

回答

4

尝试按照包含片段类代码地图:

public void onDestroyView() 
{ 
    super.onDestroyView(); 
    Fragment fragment = (getSupportFragmentManager().findFragmentById(R.id.map)); 
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
    ft.remove(fragment); 
    ft.commit(); 
} 

,我看到你的评论,我认为你只是初始化GoogleMap的只是时间,它是空,您有类似下面的代码,

if (googleMap == null) 
{ 

    // initialize Map 
} 

删除如果部分并初始化您的地图。

+0

我试过上面的,问题是,当我按回来,我得到一个空的地图,没有引脚和数据我从服务器中检索。 – 2014-10-27 08:21:16

+0

请参阅我的编辑人 – 2014-10-27 08:24:31

+0

但获取位置的代码未链接到初始化地图。 – 2014-10-27 08:28:36