应用程序在恢复应用程序时崩溃

时间:2016-12-22 11:11:49

标签: android android-fragments drawerlayout onresume

请任何人帮助我,我是android studio中的新手,我的应用程序在恢复应用程序时崩溃,

我有三种不同的片段布局

yourPlayerItem.errorLog()

恢复应用程序时我需要加载一个带有地图的片段,

我收到以下错误:

  

引起:java.lang.IllegalArgumentException:二进制XML文件行

     

39:将id为0x7f0f018a,标记为null或父ID为0xffffffff与com.google.android.gms.maps.SupportMapFragment

的另一个片段重复

请任何一个人如何解决这个问题。

这是我的片段类:

 <fragment 
    android:id="@+id/map_online"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/action_bar" /> with different ID.

谢谢。

2 个答案:

答案 0 :(得分:0)

您的应用程序崩溃,因为片段内的静态片段无法删除或替换,您只能隐藏或显示此静态片段。 像这样制作你的xml文件:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/coreLayout"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical">

        <FrameLayout
            android:id="@+id/fragment_home_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>
你的fragment.java文件中的

写下这段代码:

 PlaceAutocompleteFragment autocompleteFragmentSourceAddress = new PlaceAutocompleteFragment();
  replaceFragment(autocompleteFragmentSourceAddress, R.id.fragment_home_container);

答案 1 :(得分:0)

您需要在重新创建片段视图中的新片段之前删除片段,因此在==null方法中添加onCreatedView条件,

View mainView;// this should be global variable.

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if(mainview==null){
           mainView = inflater.inflate(R.layout.fragment_layout, container, false);
           initializeView();//initialize all views in this method instead of onActivityCreated 
        }
        return mainView;
    }
  

当您推送上方片段时添加此内容以避免重复

try {
     android.app.Fragment fragment = getFragmentManager().findFragmentById(R.id.map_online);
     if (fragment != null) {
         android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.remove(fragment);
         ft.commit();
     }
} catch (Exception e) {
  e.printStackTrace();
}