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版本。
我在发行说明https://developers.google.com/maps/documentation/android-sdk/releases
中未找到对AndroidMap之后的SupportMapFragment的任何更新。编辑:在任何人问之前,form
是Form
类的实例,该类扩展了AppCompatActivity
(来自AndroidX)
答案 0 :(得分:11)
此问题已通过公共问题跟踪器报告给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 = true
android.enableJetifier = true
最后,对于引用支持库的现有代码,您可以使用Android Studio 3.2+中的“重构->重构为AndroidX”工具来自动将代码转换为使用新的AndroidX软件包。
答案 1 :(得分:9)
我遇到了同样的问题,已通过将所有导入更新到build.gradle文件中可用的最新版本并添加
来解决android.enableJetifier=true
android.useAndroidX=true
到gradle.properties
这是我导入的地图包的版本
implementation 'com.google.android.gms:play-services-maps:15.0.1'
您只需修复一些导入,然后就可以完成
我希望
编辑:即使在编辑完我刚才说的内容之后,您仍然会看到Java中显示的错误,但是它可以编译并运行而没有错误
EDIT2:昨天,他们提出了关于issuetracker的解决方法 https://issuetracker.google.com/issues/110573930#comment13
答案 2 :(得分:3)
添加最新的Google Map Play服务,即可解决问题。
实现'com.google.android.gms:play-services-maps:16.0.0'
答案 3 :(得分:3)
我刚刚在成绩应用模块上实现了最新版本的play-services-maps,如下所示:
**
实现'com.google.android.gms:play-services-maps:17.0.0'
**
答案 4 :(得分:2)
不幸的是,Android Jetifier对我不起作用。我通过将SupportMapFragment
复制到我的项目并更改父项来解决了这个问题。在此过程中,我还必须复制名为zzak
的类(将其重命名为SupportMapCallback
)。
请注意,您现在应该将此解决方案作为临时原因,它独立于Play Services库的更新。如果您还需要尽快迁移到AndroidX,请随时从此处获取它:
https://gist.github.com/mroczis/3988e390a8b04fad3c8714181718cd60
答案 5 :(得分:2)
要使其正常工作,您必须使用以下版本或更高版本:
com.google.android.gms:play-services-maps:16.0.0
迁移到AndroidX后,请确保使缓存无效并重新启动以摆脱Google Maps依赖项上的所有红色错误。
答案 6 :(得分:2)
最后,这是一个完美的答案
1 。 添加
android.enableJetifier=true
android.useAndroidX=true
到gradle.properties
2 。 使用Android Studio 3.2或更高版本,将您的项目迁移到AndroidX,然后从菜单栏中选择 Refactor>迁移到AndroidX
3 。 (最重要的) 您的某些项目导入(在类中使用)将需要由等效的AndroidX库替换。 Here您可以找到库及其等效项。只需替换它们即可。 完成,您很好:-)
答案 7 :(得分:1)
您需要将Android Studio版本更新至3.2以上,但仍为测试版。 问题是Google Maps库正在使用支持库中的Fragment类,因此它与androidX冲突,因此Android Studio 3.2版本可以重构所有依赖项以使用androidX类。
答案 8 :(得分:0)
我也遇到了这个问题。 确实不是很好,而且肯定是临时的,但这是我可以使它起作用的唯一方法。所以至少它使我畅通无阻,直到问题解决为止。
final Object mf = getChildFragmentManager().findFragmentById(R.id.map);
if (mf instanceof SupportMapFragment) {
final SupportMapFragment smf = (SupportMapFragment) mf;
// ...
} else {
//handle
}
它既可以在编译时运行,也可以在运行时运行。
答案 9 :(得分:0)
请注意,它再次失败,出现“ com.google.android.gms:play-services-maps:16.1.0”,因此请始终附加到版本16.0.0,直到他们在以后的版本中修复此错误为止。
答案 10 :(得分:0)
请确保在您导入androidx.fragment.app.Fragment;
的片段Java类以及从中引用该特定片段的Java类中,也以相同的方式(即import androidx.fragment.app.Fragment;
之后,要获取我们创建的片段的引用,请使用getSupportFragmentManager().findFrgmentById(R.id.fragment_id)
。
总结一下,请确保所有相关的Java或Kotlin类中的导入都相同。