代码之家  ›  专栏  ›  技术社区  ›  TeeTracker

SupportMapFragment无法与androidx命名空间一起使用[duplicate]

  •  0
  • TeeTracker  · 技术社区  · 6 年前
    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片段 无法强制转换为 支持映射片段 (扩展了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)

    0 回复  |  直到 6 年前
        1
  •  13
  •   xomena    6 年前

    这个问题已经在公共问题跟踪中报告给了谷歌:

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

    我建议把这个功能请求放在公共问题跟踪器上,添加您的投票,并订阅来自Google的进一步通知。希望Google能在Android地图SDK的下一个版本中实现它。

    更新

    谷歌在公共问题追踪中提供了以下答案

    大家好,

    如前所述,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中使用“Re因数& Gt;Re因数to AndroidX”工具自动转换代码以使用新的ANDROIDX包。

        2
  •  13
  •   Marco Tondini    6 年前

    我也遇到了同样的问题,通过将所有导入更新到build.gradle文件中的最新版本并添加

    android.enableJetifier=true
    android.useAndroidX=true
    

    到gradle.properties

    这是我导入的maps包的版本

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

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

    我希望

    编辑:即使在编辑了我刚才所说的内容之后,您仍然会看到java中显示的错误,但是它编译和运行时没有错误

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

        3
  •  5
  •   Raj kannan Iyyappan    6 年前

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

    实现“com.google.android.gms:play services maps:16.0.0”

    Google play services latest versions.

        4
  •  3
  •   Asad Khan    5 年前

    最后,这里是完美的答案

    1个 . 添加

    android.enableJetifier=true
    android.useAndroidX=true
    

    到gradle.properties

    2个 . 使用AndroidStudio3.2更高版本将项目迁移到AndroidX选择 重构>迁移到AndroidX 从菜单栏

    . (最重要的) 一些项目导入(在类中使用)将需要替换为等效的AndroidX库。 Here 你可以找到库和它们的等价物。只要替换它们。 好了,你可以走了:-)

        5
  •  3
  •   Md. Masum Billah    5 年前

    我刚刚在grade应用程序模块上实现了最新版本的play services地图,如下所示:

    **

    实现“com.google.android.gms:play services maps:17.0.0”

    **

        6
  •  2
  •   Mike    6 年前

    要使此功能正常工作,您必须使用以下版本或更高版本:

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

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

        7
  •  2
  •   mroczis    6 年前

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

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

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

        8
  •  1
  •   Mohamed ElSawaf    6 年前

    你需要将Android studio版本更新到3.2以上,它仍然是beta版本。 问题是Google地图库使用的是支持库中的片段类,所以它与androidX冲突,所以Android Studio 3.2版本将重构所有依赖项以使用androidX类。

        9
  •  0
  •   Krisztián Vizsy    6 年前

    我也有这个问题。 这真的不好,当然是暂时的,但那是我唯一能让它工作的方法。所以至少在它修好之前它让我畅通无阻。

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

    它在编译时和运行时都能工作。

        10
  •  0
  •   vikir789    5 年前

    小心点,它又失败了,出现了“com.google.android.gms:play services maps:16.1.0”,所以在他们在将来的版本中修复这个错误之前,请保持与版本16.0.0的连接。