SupportMapFragment不支持AndroidX Fragment

问题描述 投票:17回答:8
import com.google.android.gms.maps.SupportMapFragment;
import androidx.fragment.Fragment;
...
private SupportMapFragment mMapFragment;
...
mMapFragment = (SupportMapFragment) form.getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);

这里,IDE显示androidx.fragment.Fragment无法强制转换为SupportMapFragment(扩展android.support.v4.app.Fragment)的错误

我使用的是play-services-maps的15.0.1版和AndroidX库的1.0.0-beta01版。

在发布说明中我没有在AndroidX之后找到SupportMapFragment的任何更新:https://developers.google.com/maps/documentation/android-sdk/releases

编辑:在有人问之前,formForm类的一个实例,它扩展了AppCompatActivity(来自AndroidX)

android google-maps android-fragments google-maps-android-api-2 androidx
8个回答
12
投票

Google已在公共问题跟踪器中报告此问题:

https://issuetracker.google.com/issues/110573930

我建议在公共问题跟踪器中主演功能请求,以添加您的投票并订阅来自Google的进一步通知。希望Google能够在下一版Android Maps SDK中实现它。

更新

Google在公共问题跟踪器中提供了以下答案

大家好,

如前所述,Google Maps API目前基于支持库而非AndroidX。 Google Maps API的未来版本肯定会支持AndroidX,但与此同时,以下解决方法将为您解决此问题:

  • 使用Android Studio 3.2(当前预览)或更高版本
  • 确保build.gradle包含'compileSdkVersion 28'(新AS 3.2项目的默认值)
  • 在gradle.properties文件中包含以下内容(新AS 3.2项目的默认值) android.useAndroidX =真 android.enableJetifier =真

最后,对于引用支持库的现有代码,您可以使用Android Studio 3.2+中的“Refactor - > Refactor to AndroidX”工具自动转换代码以使用新的AndroidX软件包。


12
投票

我遇到了同样的问题,通过将所有导入更新到build.gradle文件中可用的最后一个版本并添加来解决

android.enableJetifier=true
android.useAndroidX=true

到gradle.properties

这是我导入的地图包的版本

implementation 'com.google.android.gms:play-services-maps:15.0.1'

你只需要修复一些导入然后就完成了

我希望

编辑:即使编辑我刚才说的,你仍然会有java中显示的错误,但它编译并运行没有错误

编辑2:昨天他们建议在issuetracker https://issuetracker.google.com/issues/110573930#comment13上解决问题


3
投票

添加最新的谷歌地图播放服务,这将解决问题。

实现'com.google.android.gms:play-services-maps:16.0.0'

Google play services latest versions.


2
投票

为此,您必须使用以下版本或更高版本:

com.google.android.gms:play-services-maps:16.0.0

迁移到AndroidX后,请务必使缓存无效并重新启动以消除Google Maps依赖项上的所有红色错误。


2
投票

不幸的是,Android Jetifier并不适合我。我通过将SupportMapFragment复制到我的项目并更改父项来解决了这个问题。在此过程中,我还必须复制名为zzak的类(将其重命名为SupportMapCallback)。

请注意,您应该将此解决方案作为临时原因,因为它现在独立于Play服务库的更新。如果您还需要尽快迁移到AndroidX,请随时从此处获取:

https://gist.github.com/mroczis/3988e390a8b04fad3c8714181718cd60


2
投票

最后,这是完美的答案

1.添加

android.enableJetifier=true
android.useAndroidX=true

到gradle.properties

2.使用android studio 3.2更高版本将您的项目迁移到AndroidX,从菜单栏中选择Refactor> Migrate to AndroidX

3.(最重要)您的一些项目导入(在类中使用)将需要由等效的AndroidX库替换。 Here你可以找到库及其等价物。只需要替换它们。完成,你很高兴:-)


1
投票

您需要将Android工作室版本更新到3.2以上,它仍然是测试版。问题是Google Maps库正在使用支持库中的Fragment类,因此它与androidX冲突,因此Android Studio 3.2版本使重构所有依赖项都使用androidX类。


0
投票

我也有这个问题。这真的不好,而且肯定是暂时的,但这是我能让它发挥作用的唯一方法。所以至少它解除了我,直到它得到修复。

    final Object mf = getChildFragmentManager().findFragmentById(R.id.map);
    if (mf instanceof SupportMapFragment) {
        final SupportMapFragment smf = (SupportMapFragment) mf;
        // ...
    } else {
        //handle
    }

它适用于编译器时间和运行时。


0
投票

请注意,它与'com.google.android.gms:play-services-maps:16.1.0'再次失败,因此请继续使用16.0.0版,直到他们在将来的版本中修复此错误。

© www.soinside.com 2019 - 2024. All rights reserved.