java.lang.IllegalArgumentException:二进制XML文件第7行:带有另一个com.google.android.gms.maps.MapFragment片段
我已经显示了地图片段,它位于导航抽屉片段的第一个位置。在第一次显示地图时没有任何错误。如果我选择第二次,它将给出android.view.InflateException。 共有8个项目的抽屉菜单。除了这个地图片段,其他的工作正常。 下面我给出了我的代码。请帮助我 HomeFragment.java fragment_home.xml 格雷德尔先生java.lang.IllegalArgumentException:二进制XML文件第7行:带有另一个com.google.android.gms.maps.MapFragment片段,android,android-fragments,android-mapview,Android,Android Fragments,Android Mapview,我已经显示了地图片段,它位于导航抽屉片段的第一个位置。在第一次显示地图时没有任何错误。如果我选择第二次,它将给出android.view.InflateException。 共有8个项目的抽屉菜单。除了这个地图片段,其他的工作正常。 下面我给出了我的代码。请帮助我 HomeFragment.java fragment_home.xml 格雷德尔先生 经过长时间的研究,我找到了解决我自己问题的办法。 只需将MapFragment从java和xml更改为SupportMapFragment 碎片 X
经过长时间的研究,我找到了解决我自己问题的办法。 只需将MapFragment从java和xml更改为SupportMapFragment 碎片 Xml
我不知道那个例外。如果有人知道,请解释。上面提到的@MichaelDodd解决方案可能重复,但我在Map Fragment中遇到了这个问题。其他片段工作正常,在这种情况下,您是否也可以发布您的应用程序级别builld.gradle?只想检查您的依赖项是否正确,如果删除了行android:name=com.google.android.gms.maps.MapFragment,您是否仍然会收到相同的错误?显然,这不会解决你的问题,但你想统治其他东西out@MichaelDodd我已经编辑了我的问题,请检查一下。我想我可以为你的答案提供一个解释,在谷歌的无限智慧中,有两种类型的片段,android.app.fragment和android.support.v4.app.fragment。它们的用途相同,但分开管理,就像树上的树枝一样有效。因此,依赖或源于它们的一切都被分为内置和支持。两者互不兼容,因此虽然MapFragment依赖于android.app.Fragment,但您使用的是android.support.v4.app;片段,因此需要使用SupportMapFragment。完全有道理’\_ツ_/¯
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);
}
}
<?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)
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'
}
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.frag_home_map);
mapFragment.getMapAsync(this);
<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" />