Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在双窗格布局中使用SupportMapFrament会出现重复布局错误_Android_Android Fragments_Android Lifecycle_Google Maps Android Api 2_Android Maps V2 - Fatal编程技术网

Android 在双窗格布局中使用SupportMapFrament会出现重复布局错误

Android 在双窗格布局中使用SupportMapFrament会出现重复布局错误,android,android-fragments,android-lifecycle,google-maps-android-api-2,android-maps-v2,Android,Android Fragments,Android Lifecycle,Google Maps Android Api 2,Android Maps V2,我使用的是驱动细节视图的ListView。列表视图和详细视图都有自己的活动。局部视图以较小的布局显示地图。映射片段的代码如下所示: 当我第一次在平板电脑的双窗格布局中单击列表项时,它工作正常。但在随后选择任何其他列表项时,将抛出以下错误: android.view.InflateException:二进制XML文件行#159:膨胀类片段时出错 位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 位于

我使用的是驱动细节视图的ListView。列表视图和详细视图都有自己的活动。局部视图以较小的布局显示地图。映射片段的代码如下所示:


当我第一次在平板电脑的双窗格布局中单击列表项时,它工作正常。但在随后选择任何其他列表项时,将抛出以下错误:

android.view.InflateException:二进制XML文件行#159:膨胀类片段时出错
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
在android.view.LayoutInflater.充气(LayoutInflater.java:479)
在android.view.LayoutInflater.inflate(LayoutInflater.java:391)
位于com.xxxx.android.activity.fragments.EventDetailFragment.onCreateView(EventDetailFragment.java:97)
位于android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
位于android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
位于android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
位于android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
位于android.os.Handler.handleCallback(Handler.java:587)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:132)
位于android.app.ActivityThread.main(ActivityThread.java:4123)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:491)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.IllegalArgumentException:二进制XML文件行#159:重复id 0xffffffff、标记详细信息_map_short,或父id 0x0带有com.google.android.gms.maps.SupportMapFragment的另一个片段
位于android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:660)
... 还有22个
EventDetailFragment如下所示:

@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
e(标记“onCreateView已调用!”);
//如果重新创建了活动(例如从屏幕旋转),则恢复
//onSaveInstanceState()设置的上一篇文章选择。
//在双窗格布局中,这主要是必需的。
如果(savedInstanceState!=null){
mCurrentPosition=savedInstanceState.getInt(ARG_位置);
mCurrEventId=savedInstanceState.getString(事件ID);
}
//为该碎片膨胀布局
detailsView=充气机。充气(R.layout.fragment\u事件\u细节,容器,假);
mMapFragment=(SupportMapFragment)getFragmentManager().findFragmentByTag(映射片段标记);
//我们不能保证地图是可用的,因为Google Play服务可能会
//没有。
//setupMapiFneed();//稍后在onStart中执行此操作
返回详细视图;
}
“列表”活动中的代码,用于在选择项目时显示详细信息活动或片段:

@覆盖
已选择公共索引(整数索引){
Log.d(标记,“所选项目为:”+索引);
if(findViewById(R.id.event\u details\u container)!=null){
//在双窗格模式下,按显示此活动中的详细信息视图
//使用
//片段事务。
Log.d(标记“已执行的双窗格布局导航”);
Bundle参数=新Bundle();
arguments.putInt(EventDetailFragment.ARG_位置,索引);
EventDetailFragment=新的EventDetailFragment();
fragment.setArguments(参数);
getSupportFragmentManager().beginTransaction()
.replace(R.id.event_details_容器,片段).commit();
}
否则{
//在单窗格模式下,只需启动详细信息活动
//对于所选项目ID。
d(标签,“单窗格布局导航-创建要显示的新活动!”);
getSupportFragmentManager().executePendingTransactions();
Intent detailIntent=新的Intent(这个,EventDetailActivity.class);
detailIntent.putExtra(EventDetailFragment.ARG_位置,索引);
星触觉(意向);
}
}
我不明白为什么在双窗格布局中这不起作用?为什么只有MapFragment似乎抛出了错误?在我添加
SupportMapFragment
之前,一切都很顺利。任何帮助/想法都将不胜感激


PS:对于API级别10以后的版本,必须支持该代码。

Google Maps for Android API v2目前无法在现成的仿真器上运行。它可能需要设置一点YMMV,请参见-。你最好的选择是在真正的设备上测试,直到谷歌解决这个问题。请启动该错误-

我终于找到了正确的修复方法。因为我在两个窗格布局的片段中使用地图;我必须以编程方式构造映射,而不是用xml定义。android SDK(Google PlayServices)中的地图示例ProgrammaticDemoActivity演示了这一点。下面是这个例子的摘录,这个例子叫做
// It isn't possible to set a fragment's id programmatically so we set a tag instead and
// search for it using that.
mMapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentByTag(MAP_FRAGMENT_TAG);

// We only create a fragment if it doesn't already exist.
if (mMapFragment == null) {
    // To programmatically add the map, we first create a SupportMapFragment.
    mMapFragment = SupportMapFragment.newInstance();

    // Then we add it using a FragmentTransaction.
    FragmentTransaction fragmentTransaction = getSupportFragmentManager()
            .beginTransaction();
    fragmentTransaction.add(android.R.id.content, mMapFragment, MAP_FRAGMENT_TAG);
    fragmentTransaction.commit();
}