Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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 膨胀类片段时出错:重复id、标记null或父id与另一个片段_Android_Xml_Android Layout_Listview_Google Maps Android Api 2 - Fatal编程技术网

Android 膨胀类片段时出错:重复id、标记null或父id与另一个片段

Android 膨胀类片段时出错:重复id、标记null或父id与另一个片段,android,xml,android-layout,listview,google-maps-android-api-2,Android,Xml,Android Layout,Listview,Google Maps Android Api 2,我正在尝试制作一个应用程序,当用户点击ListView中的项目时,谷歌地图就会显示出来 我尝试了以下代码: ShowPlacesActivity.java public class ShowPlaceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我正在尝试制作一个应用程序,当用户点击ListView中的项目时,谷歌地图就会显示出来

我尝试了以下代码:

ShowPlacesActivity.java

public class ShowPlaceActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_place);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container_showplaces, new PlaceholderFragment())
                    .commit();
        }
        getActionBar().setSubtitle(getString(R.string.activity_showplaces_subtitle));
    }

}
activity\u show\u place.xml

<FrameLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container_showplaces"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context="com.krupal.rememberthisplace.ShowPlaceActivity" tools:ignore="MergeRootFrame" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical"

    >


    <ListView
        android:id="@+id/listView_places"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
      />


</LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment
        android:id="@+id/mymap"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>
MapsFragment.java中,我将地图显示为:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


   rootView = inflater.inflate(R.layout.fragment_maps, container, false);


    try {
        // Loading map
        initilizeMap();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return rootView;
}
当我第一次单击ListView的项目时,它会显示地图…然后,当我选择另一个项目时,它会崩溃:

Logcat日志:

android.view.InflateException:二进制XML文件行#7:错误 膨胀类片段 位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 位于android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在android.view.LayoutInflater.充气(LayoutInflater.java:489) 在android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在com.krupal.rememberDisplay.MapsFragment.onCreateView(MapsFragment.java:40)上 在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828) 位于android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032) 运行(BackStackRecord.java:622) 位于android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) 在android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 位于android.os.Handler.handleCallback(Handler.java:605) 位于android.os.Handler.dispatchMessage(Handler.java:92) 位于android.os.Looper.loop(Looper.java:137) 位于android.app.ActivityThread.main(ActivityThread.java:4424) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:825) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592) 在dalvik.system.NativeStart.main(本机方法)处,由以下原因引起:java.lang.IllegalArgumentException:二进制XML文件行#7:重复 id 0x7f0b001e、标记null或父id 0xffffffff与另一个片段 对于com.google.android.gms.maps.MapFragment 位于android.app.Activity.onCreateView(Activity.java:4248) 位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673) 位于android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在android.view.LayoutInflater.充气(LayoutInflater.java:489) 在android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在com.krupal.rememberDisplay.MapsFragment.onCreateView(MapsFragment.java:40)上 在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828) 位于android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032) 运行(BackStackRecord.java:622) 位于android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) 在android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 位于android.os.Handler.handleCallback(Handler.java:605) 位于android.os.Handler.dispatchMessage(Handler.java:92) 位于android.os.Looper.loop(Looper.java:137) 位于android.app.ActivityThread.main(ActivityThread.java:4424) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:825) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592) 在dalvik.system.NativeStart.main(本机方法)

编辑:soloution不适合我

我现在解决了

另一个解决办法是,这个答案对我很有效

正如上面所解释的,我在包含映射的`片段中添加了
onDestroyView()

@Override
public void onDestroyView() {
    super.onDestroyView();
    MapFragment f = (MapFragment) getFragmentManager()
                                         .findFragmentById(R.id.mymap);
    if (f != null) 
        getFragmentManager().beginTransaction().remove(f).commit();
}

这解决了我的问题:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    if(rootView==null){
        rootView = inflater.inflate(R.layout.MapFragment, container, false);
    }
    return rootView;
}
详情如下:


实际上,您不需要在onDestroyView中使用它。我的案例是删除带有SupportMapFragment的膨胀布局,就是这样。

完美的可能复制品!为meMan工作,现在是凌晨3点,我真是太蠢了,竟然删除了添加的片段。谢谢,伙计。干杯…这是一个非常好的解决方案,尤其是使用标签。切换到远处的选项卡(setOffscreenPageLimit()之外)将触发片段上的onDestroyView方法(否则“重复Id问题将持续存在”),但启动另一个活动不会,因此当您从已启动的活动中回击时,您将看到片段仍然存在。非常感谢您的支持。非常有效。此问题持续了5到6个小时。只是为了从片段中删除添加的视图。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    if(rootView==null){
        rootView = inflater.inflate(R.layout.MapFragment, container, false);
    }
    return rootView;
}
MapFragment f = (MapFragment) getFragmentManager()
                                         .findFragmentById(R.id.mymap);
    if (f != null) 
        getFragmentManager().beginTransaction().remove(f).commit();