Java 由二进制XML文件(Android)引起的IllegalArgumentException

Java 由二进制XML文件(Android)引起的IllegalArgumentException,java,android,xml,Java,Android,Xml,我有一个带有3个选项卡的基本导航。其中一个包含一个带有谷歌地图的片段。但是导航不好,在我第二次选择选项卡后,它一直崩溃 它说这是因为地图的XML文件在我看来并没有任何错误。有人能看到我现在被蒙蔽的错误吗 日志: android.view.InflateException: Binary XML file line #7: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(

我有一个带有3个选项卡的基本导航。其中一个包含一个带有谷歌地图的片段。但是导航不好,在我第二次选择选项卡后,它一直崩溃

它说这是因为地图的XML文件在我看来并没有任何错误。有人能看到我现在被蒙蔽的错误吗

日志:

android.view.InflateException: Binary XML file line #7: Error inflating class fragment
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
        at com.example.dell.animalz.MapsFragment.onCreateView(MapsFragment.java:22)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
        at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1297)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:672)
        at      

android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
        at   
android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
        at     
android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
        at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
        at com.example.dell.animalz.HomeActivity.onTabSelected(HomeActivity.java:67)
        at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:674)
        at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1217)
        at     
com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:976)
        at android.view.View.performClick(View.java:4637)
        at android.view.View$PerformClick.run(View.java:19422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5586)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f070067, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
        at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:297)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)

HomeActivity.java

public class HomeActivity extends FragmentActivity implements ActionBar.TabListener {

ViewPager mViewPager = null;
private TabsMenuAdapter mAdapter;
private ActionBar actionBar;

private String []tabs = {"News", "Animalz", "Maps"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_layout);

    mViewPager = (ViewPager)findViewById(R.id.viewpager1);
    actionBar = getActionBar();
    mAdapter = new TabsMenuAdapter(getSupportFragmentManager());

    mViewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    for(String tab_names : tabs){
        actionBar.addTab(actionBar.newTab().setText(tab_names).setTabListener(this));
    }
    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    mViewPager.setCurrentItem(tab.getPosition());

}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    mViewPager.setCurrentItem(tab.getPosition());
}
}
Maps.java

public class MapsFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.maps_layout, container, false);
    return rootView;

  }
}
Maps.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"/>
</RelativeLayout>

任何帮助都将不胜感激,提前感谢

必须在包含贴图的片段的onDestroyView方法中删除MapFragment,引用时,必须执行以下操作:

// override the onDestroyView of the fragment
@Override
public void onDestroyView() {
    super.onDestroyView();
    MapFragment f = (MapFragment) getFragmentManager()
                                         .findFragmentById(R.id.the_map);
    if (f != null) 
        getFragmentManager().beginTransaction().remove(f).commit();
}

每次检查父视图是否为空。如果是,则移除。更改您的Maps.java


请注意异常的原因:二进制XML文件第7行:重复id 0x7f070067、标记null或父id 0x0以及com.google.android.gms.maps.SupportMapFragmentation的另一个片段为什么不动态添加该片段,而不是通过XML添加?这样做很有效,应用程序停止崩溃。然而,logcat中的错误在应用程序启动时不断发生。如果您需要通过代码删除它,那么为什么要通过xml添加片段?通过代码本身添加以在一个地方处理所有事情不是很好吗?@MehulJoisar这会很好,但我认为通过xml添加不会有什么坏处,因为他只会从xml创建一个实例,然后删除该实例是的,谢谢你的暗示,穆罕默德,不幸的是,不能对你的答案进行投票…@zakbennani没关系,没关系,但原因是什么?
private static View view;    
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup group,Bundle bundle)
{
    if(view!=null)
    {
        ViewGroup parent =(ViewGroup)view.getParent();
        if(parent!=null)
            parent.removeView(view);
    }
    try{
        view=inflater.inflate(R.layout.maps, group, false);
        ........

    }
    catch(Exception e)
    {
        Log.e("ERROR", ""+e);
    }

    return view;
}