SupportMapFragment не поддерживает фрагмент AndroidX - PullRequest
0 голосов
/ 04 июля 2018
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 карт воспроизведения-услуг и версию 1.0.0-бета01 библиотек AndroidX.

Я не нашел обновлений SupportMapFragment после AndroidX в заметках о выпуске: https://developers.google.com/maps/documentation/android-sdk/releases

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

Ответы [ 9 ]

0 голосов
/ 07 мая 2019

Будьте осторожны, с 'com.google.android.gms: play-services-maps: 16.1.0' снова произойдет сбой, поэтому оставайтесь подключенными к версии 16.0.0, пока они не исправят эту ошибку в будущих выпусках.

0 голосов
/ 15 июля 2019

Наконец, вот идеальный ответ

1 . Добавить

android.enableJetifier=true
android.useAndroidX=true

На граффити. Свойства

2 . С Android Studio 3.2 выше перенесите ваш проект в AndroidX, выбрав Refactor> Migrate to AndroidX в строке меню

3 . (Самое важное) Некоторые из ваших проектов импорта (используемые в классах) должны быть заменены эквивалентными библиотеками AndroidX. Здесь вы можете найти библиотеки и их эквиваленты. Просто замените их. Готово, ты в порядке: -)

0 голосов
/ 17 октября 2018

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

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

Последние версии сервисов Google Play.

0 голосов
/ 06 декабря 2018

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

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

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

0 голосов
/ 11 октября 2018

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

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

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

0 голосов
/ 18 сентября 2018

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

android.enableJetifier=true
android.useAndroidX=true

На граффити. Свойства

это версия пакета карт, которую я импортировал

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

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

Я надеюсь

РЕДАКТИРОВАТЬ: даже после редактирования того, что я только что сказал, у вас все равно будет отображаться ошибка в Java, но она компилируется и запускается без ошибок

РЕДАКТИРОВАТЬ2: вчера они предложили обходной путь для эмитента трекер https://issuetracker.google.com/issues/110573930#comment13

0 голосов
/ 22 августа 2018

У меня тоже была эта проблема. Это действительно не красиво, и, конечно, временно, но это был единственный способ, которым я мог заставить это работать. Так что, по крайней мере, он разблокировал меня, пока не починил.

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

Работает как во время компиляции, так и во время выполнения.

0 голосов
/ 02 августа 2018

Вам нужно обновить версию Android Studio до версии более 3.2, это все еще бета-версия. Проблема заключается в том, что библиотека Google Карт использует класс Fragment из библиотеки поддержки, поэтому он конфликтует с androidX, поэтому в версии Android Studio 3.2 для всех классов используется andactX.

0 голосов
/ 04 июля 2018

Об этой проблеме уже сообщалось в 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.

...