java.lang.IllegalArgumentException: строка двоичного XML-файла # 7: с другим фрагментом для com.google.android.gms.maps.MapFragment - PullRequest
0 голосов
/ 23 декабря 2018

Я показываю фрагмент карты, который находится во фрагменте навигационной панели с первой позицией. При первом отображении карты без ошибок. Если я выбираю второй раз, это дает android.view.InflateException.Всего в ящике 8 предметов.За исключением этого фрагмента карты, другие работают нормально.Ниже я дал свой код.Пожалуйста, помогите мне.

HomeFragment.java

    public class HomeFragments extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks {

    private GoogleMap mGoogleMap;

    private GoogleApiClient mGoogleApiClient;

     public HomeFragments() {
    }

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

    private void initViews(View view) {
        try {
            MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.frag_home_map);
            mapFragment.getMapAsync(this);

            FloatingActionButton mMapTypeFab = view.findViewById(R.id.fab_home_map_type);
            mMapTypeFab.setOnClickListener(this);

            mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
                    .addConnectionCallbacks(this)
                    .addApi(LocationServices.API)
                    .build();

        } catch (Exception e) {
            log(TAG, e);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        mGoogleApiClient.connect();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }

    private void mapUISetting() {
        try {
            mGoogleMap.getUiSettings().setAllGesturesEnabled(true);
            mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
        } catch (Exception e) {
            log(TAG, e);
        }
    }

       @Override
    public void onConnected(@Nullable Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(),
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            AppUtils.showToast(getActivity(), "Allow Location Permission");
            return;
        }
        mapUISetting();
        mGoogleMap.setMyLocationEnabled(true);
    }
}

frag_home.xml

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

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

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_home_map_type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="@dimen/margin_10dp"
        android:layout_marginBottom="@dimen/margin_25dp"
        android:elevation="@dimen/margin_5dp"
        android:src="@drawable/ic_fab_map_layer"
        app:backgroundTint="@color/colorAppWhite"
        app:fabSize="normal" />

</RelativeLayout>

Исключение

FATAL EXCEPTION: main
    Process: com.app.newt.employee, PID: 30594
    android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class fragment
        at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
        at com.app.newt.employee.fragments.HomeFragments.onCreateView(HomeFragments.java:54)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
     Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
        at com.app.newt.employee.fragments.HomeFragments.onCreateView(HomeFragments.java:54) 
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460) 
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) 
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802) 
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) 
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) 
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) 
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:7325) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
     Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f080065, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
        at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2227)
        at android.app.FragmentController.onCreateView(FragmentController.java:99)
        at android.app.Activity.onCreateView(Activity.java:6085)
        at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:766)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
        at com.app.newt.employee.fragments.HomeFragments.onCreateView(HomeFragments.java:54) 
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460) 
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) 
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802) 
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) 
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) 
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) 
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:7325) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.employee"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            buildConfigField "String", "ENCRYPTION_KEY", "$rootProject.encryptionKey"
            buildConfigField "String", "BASE_URL", "$rootProject.proServer"
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            debuggable false
        }
        debug {
            buildConfigField "String", "ENCRYPTION_KEY", "$rootProject.encryptionKey"
            buildConfigField "String", "BASE_URL", "$rootProject.localServer"
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.supportLibraryVersion"
    implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitLibraryVersion"
    implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitLibraryVersion"
    implementation "com.squareup.retrofit2:adapter-rxjava:$rootProject.retrofitLibraryVersion"
    implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
    implementation 'io.reactivex:rxjava:1.1.7'
    implementation 'io.reactivex:rxandroid:1.2.1'
    implementation 'com.github.paolorotolo:appintro:4.1.0'

    implementation 'com.google.android.gms:play-services-maps:16.0.0'
    implementation 'com.google.android.gms:play-services-location:16.0.0'
    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
    implementation 'com.google.android.gms:play-services-places:16.0.0'

}

1 Ответ

0 голосов
/ 23 декабря 2018

После долгих исследований я нашел решение для моего собственного вопроса.Просто измените MapFragment как SupportMapFragment с Java и XML.

Фрагмент

SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.frag_home_map);
            mapFragment.getMapAsync(this);

Xml

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

Я понятия не имею об этом исключении.Если кто-нибудь знает, пожалуйста, объясните.

...