当前位置: 首页 > 知识库问答 >
问题:

在使用包含映射片段的片段时使用onbackpressed()

时宾实
2023-03-14
public void onBackPressed() {

                int count = getSupportFragmentManager().getBackStackEntryCount();

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


                    getSupportFragmentManager().popBackStackImmediate();
                }

            }
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
@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的片段?

共有1个答案

钦英发
2023-03-14

在包含Map的片段类中尝试以下代码:

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
}

移除if部分并初始化映射。

 类似资料:
  • 我在使用LocalbroadcastManager将数据从一个片段传输到另一个片段时遇到问题。 FragmentA有editText,点击它将启动FragmentB。FragmentB有一个项目列表,单击我想将数据传递给FragmentA的每个项目。 这是我的实现。 下面是广播消息发送的片段B。 调试/日志记录从未命中广播接收器的onReceive消息。少了什么吗?谢谢你的建议。

  • 这就是我卡住的地方。当我从导航抽屉中选择另一个项目(片段)时,它会显示出来,但当我按后退按钮时,应用程序关闭时会显示消息“不幸的是,myapp已经停止了。我是缺少了一些代码,还是必须为每个片段添加onBackPressed代码?更重要的是,我对onBackPressed方法应该去哪里感到困惑。它应该只在MainActivity中进行还是应该在每个碎片活动中进行?目前,我唯一的onBackPress

  • 我试图在Thymeleaf模板中动态创建Javascript,以便使用GoogleChart的Timeline包(注意:Google库的Spring版本中没有这个包)。 我有一个胸腺素片段的值。包含以下代码的html,然后将其包含在实际页面中: 在我的GantController类中,我有以下代码: 字符串参数=“['MegaCorp应用程序1',新日期(2018,7,2),新日期(2019,4,

  • 我有一个活动,它包含一个片段容器(FrameLayout),我在Activity.onCreate()期间在其中放置了一个片段。片段包含一个包含一串片段的ViewPager。所有这些工作都很好。页面内容显示,我可以很好地在页面中滑动,甚至可以看到操作栏中的操作,因为贡献的页面变得可见。 现在我用另一个片段替换包含ViewPager的片段: 此外,我已经用FragmentPagerAdapter替换

  • 我正在尝试在MVVMCross Xamarin Adroid应用程序中使用ActionBar。我能够在片段中加载布局,问题是上下文总是指向MainView而不是布局视图。我试图更改上下文,但资源异常。错误是 Java.Lang.NullPointerException:尝试在 null 对象引用上调用虚拟方法 'android.content.res.Resources android.conte

  • 但当我试图打开碎片时,它显示了一个npe,但它没有显示在哪里。由于我得到了布局和视图正确,我现在不知道是怎么回事。 我希望它不会因为是一个npe问题而被否决,但与通常不同的是,这个API调用没有显示npe发生的地方,我看到其他人有这样的问题 OBS:我使用这个扩展的基本概念,因为更多的地方会有这种视频行为,而且我正在努力避免代码重复。 片断 碱基片段