SupportMapFragment不支持AndroidX Fragment

Pav*_*tra 21 android google-maps android-fragments google-maps-android-api-2 androidx

import com.google.android.gms.maps.SupportMapFragment;
import androidx.fragment.Fragment;
...
private SupportMapFragment mMapFragment;
...
mMapFragment = (SupportMapFragment) form.getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
Run Code Online (Sandbox Code Playgroud)

这里,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

编辑:在任何人问之前,form是一个Form扩展的类的实例AppCompatActivity(来自AndroidX)

xom*_*ena 13

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软件包.


Mar*_*ini 13

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

android.enableJetifier=true
android.useAndroidX=true
Run Code Online (Sandbox Code Playgroud)

到gradle.properties

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

implementation 'com.google.android.gms:play-services-maps:15.0.1'
Run Code Online (Sandbox Code Playgroud)

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

我希望

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

EDIT2:昨天他们建议在issuetracker https://issuetracker.google.com/issues/110573930#comment13上找到解决方法


Raj*_*pan 5

添加最新的谷歌地图播放服务即可解决问题。

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

谷歌播放服务最新版本。


小智 5

最后,这是一个完美的答案:

  1. 添加

    android.enableJetifier=true
    android.useAndroidX=true
    
    Run Code Online (Sandbox Code Playgroud)

    到您的 gradle.properties 文件。

  2. 对于 Android Studio 3.2 或更高版本,通过从菜单中选择Refactor > Migrate to AndroidX将您的项目迁移到 AndroidX

  3. (最重要)您的一些项目导入(在类中使用)将需要替换为等效的 AndroidX 库。在这里您可以找到库及其等效项。一一替换任何引用 AndroidX 之前的库的导入。

现在你可以走了:-)


小智 5

我通过在我的应用程序build.gradle文件中实现最新版本的 play-services-maps 解决了这个问题:

implementation 'com.google.android.gms:play-services-maps:17.0.0'
Run Code Online (Sandbox Code Playgroud)