web-dev-qa-db-ja.com

SupportMapFragmentはAndroidXフラグメントをサポートしていません

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.FragmentSupportMapFragment(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から)

20
Pavitra

この問題は、公開問題トラッカーで既にGoogleに報告されています。

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

パブリック問題トラッカーで機能リクエストにスターを付けて投票を追加し、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パッケージを使用するようにコードを自動的に変換します。

12
xomena

同じ問題が発生しました。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#comment1

12
Marco Tondini

最新のGoogleマッププレイサービスを追加すると、問題が解決します。

実装 'com.google.Android.gms:play-services-maps:16.0.0'

Googleプレイサービスの最新バージョン。

4

最後に、ここに完璧な答えがあります

1。追加

Android.enableJetifier=true
Android.useAndroidX=true

Gradle.propertiesへ

2。 Android studio 3.2以降では、プロジェクトをAndroidXに移行します]メニューバーから[リファクタリング]> [AndroidXに移行]

3。 (最も重要)プロジェクトのインポートの一部(クラスで使用)を同等のAndroidXライブラリに置き換える必要があります。 ここ ライブラリとその同等物を見つけることができます。それらを置き換えるだけです。完了、あなたは行ってもいいです:-)

3
Asad Khan

残念ながら、Android Jetifierは機能しませんでした。 SupportMapFragmentをプロジェクトにコピーし、親を変更することでこの問題を解決しました。この手順の間に、zzakという名前のクラスのコピーも作成する必要がありました(SupportMapCallbackに名前を変更しました)。

このソリューションは、Play Servicesライブラリの更新から独立しているため、現時点では一時的な原因として使用する必要があることに注意してください。できるだけ早くAndroidXに移行する必要がある場合は、こちらから自由に入手してください。

https://Gist.github.com/mroczis/3988e390a8b04fad3c8714181718cd6

2
mroczis

これが機能するには、次のバージョン以上である必要があります。

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

AndroidXに移行した後は、キャッシュを無効にして再起動し、Googleマップの依存関係にあるすべての赤いエラーを取り除いてください。

2
Mike

Android studioバージョンを3.2以上に更新する必要があります。これはまだベータ版です。問題は、GoogleマップライブラリがサポートライブラリのFragmentクラスを使用しているため、androidXと競合するため、Android St​​udio 3.2バージョンはすべての依存関係をリファクタリングしてandroidXクラスを使用することです。

1
Mohamed ElSawaf

私もこの問題を抱えていました。それは本当にニースではなく、確かに一時的ですが、それが私がそれを機能させることができる唯一の方法でした。そのため、少なくとも修正されるまではブロックされませんでした。

    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にアタッチしたままにしてください。

0
vikir789

以下のように、グレードアプリモジュールに最新バージョンのplay-services-mapsを実装しました。

**

実装 'com.google.Android.gms:play-services-maps:17.0.0'

**

0