it-roy-ru.com

SupportMapFragment не поддерживает AndroidX Fragment

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)

Я использую версию 15.0.1 play-services-maps и версию 1.0.0-beta01 библиотек AndroidX.

В заметках о выпуске я не обнаружил никаких обновлений для SupportMapFragment после AndroidX: https://developers.google.com/maps/documentation/Android-sdk/releases

Правка: Прежде чем кто-либо спросит, form является экземпляром класса Form, который расширяет AppCompatActivity (из AndroidX)

15
Pavitra

Эта проблема уже была сообщена Google в трекере общедоступных проблем:

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

Я бы предложил добавить запрос на добавление функции в общедоступный трекер, чтобы добавить свой голос и подписаться на дальнейшие уведомления от Google. Надеемся, что Google внедрит его в следующих версиях Android Maps SDK.

Обновление

Google предоставил следующий ответ в трекере публичных выпусков

Всем привет,

Как уже отмечалось, API Карт Google в настоящее время базируется на библиотеках поддержки, а не на AndroidX. Будущие версии API Карт Google, безусловно, будут поддерживать AndroidX, но в то же время следующий обходной путь решит эту проблему для вас:

  • Используйте Android Studio 3.2 (предварительный просмотр) или выше
  • Убедитесь, что ваш build.gradle содержит 'compileSdkVersion 28' (по умолчанию для новых проектов AS 3.2)
  • Включите в файл gradle.properties следующее (по умолчанию для новых проектов AS 3.2)

    Android.useAndroidX = верно

    Android.enableJetifier = верно

Наконец, для существующего кода, ссылающегося на библиотеки поддержки, вы можете использовать инструмент «Refactor -> Refactor to AndroidX» в Android Studio 3.2+ для автоматического преобразования вашего кода в новые пакеты AndroidX.

9
xomena

У меня была та же проблема, исправленная путем обновления всех импортов до последней версии, доступной в файле build.gradle, и добавления

Android.enableJetifier=true
Android.useAndroidX=true

К граде. Свойства

это версия пакета карт, который я импортировал

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

Вы просто должны исправить некоторые импорта, и тогда вы закончите

Я надеюсь

Правка: даже после редактирования того, что я только что сказал, у вас все равно будет отображаться ошибка в Java, но она компилируется и работает без ошибок

Правка 2: вчера они предложили обходной путь для Issueracker https://issuetracker.google.com/issues/110573930#comment13

8
Marco Tondini

Добавьте последние сервисы Google Map Play, и это решит проблему.

реализация 'com.google.Android.gms: play-services-maps: 16.0.0'

Сервисы Google Play последних версий.

2
Raj kannan Iyyappan

Android Jetifier, к сожалению, не работает для меня. Я решил эту проблему, скопировав SupportMapFragment в мой проект и изменив родителя. Во время этой процедуры мне также пришлось сделать копию класса с именем zzak (переименовал его в SupportMapCallback).

Обратите внимание, что вы должны принять это решение как временную причину, поскольку сейчас оно не зависит от обновлений библиотеки Play Services. Если вам также необходимо как можно скорее перейти на AndroidX, скачайте его отсюда:

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

2
mroczis

Чтобы это работало, вы должны иметь следующую версию или выше:

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

После перехода на AndroidX обязательно отключите кэш и перезапустите, чтобы избавиться от всех красных ошибок в зависимостях Google Maps.

2
Mike

Вам нужно обновить версию Android Studio до версии 3.2, но она все еще является бета-версией ..__ Проблема в том, что библиотека Google Maps использует класс Fragment из библиотеки поддержки, поэтому он конфликтует с androidX, поэтому версия Android Studio 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
Krisztián Vizsy