Поскольку API getFragmentManager() Android устарел, есть ли альтернатива?

FragmentManager устарела. Есть ли альтернатива или что я могу сделать сейчас?

 PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
        autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // TODO: Get info about the selected place.
                destination = place.getName().toString();
                destinationLatLng = place.getLatLng();
            }
            @Override
            public void onError(Status status) {
                // TODO: Handle the error.
            }
        });

deprecation strike image

Ответы

Ответ 1

Этот метод устарел на уровне API 28.

Используйте FragmentActivity.getSupportFragmentManager()

Ответ 2

Вместо этого вам следует использовать класс Fragment из библиотеки поддержки Android.

android.app.Fragment устарел на уровне API 28. Используйте фрагмент библиотеки поддержки для согласованного поведения на всех устройствах и доступа к жизненному циклу.

Вместо этого используйте android.support.v4.app.Fragment.

Ответ 3

Использование библиотеки поддержки позволяет преодолеть эту проблему.

Согласно документации Класс фрагмента устарел:

Этот класс устарел в API уровня 28. Используйте фрагмент библиотеки поддержки для обеспечения согласованного поведения на всех устройствах и доступа к жизненному циклу.

Ответ 4

Поскольку вопрос немного широк, здесь решение для тех, кто перешел на androidX.

Убедитесь, что ваши фрагменты используют версии androidX в разделе import. т.е. если вы используете DialogFragment(), замените

import android.app.DialogFragment

с

import androidx.fragment.app.DialogFragment

Затем для fragmentManager при открытии show() диалогового окна, если запуск из другого fragment не изменяет его, но если он передается из Activity, сначала расширьте действие из FragmentActivity(), затем передайте supportFragmentManager:

// kotlin
import androidx.fragment.app.FragmentActivity

class MyActivity: FragmentActivity() {
    ...
    val myDialog = MyDialog()
    myDialog.show(supportFragmentManager, TAG)
    ...
}

Althogh те же шаги применимы и к support.v4, если вы не мигрировали в androidX. Просто на первом этапе замените

import android.app.DialogFragment

с

import android.support.v4.app.Fragment

Ответ 5

Xml

<fragment
    android:id="@+id/place_autocomplete_fragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment"
/>

активность

SupportPlaceAutocompleteFragment autocompleteFragment = (SupportPlaceAutocompleteFragment)
            getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

Ответ 6

Если я вас хорошо понял, TG40 теперь устарела

мы будем использовать getChildFragmentManager() Верните частный FragmentManager для размещения и управления фрагментами внутри этого фрагмента.

мы будем использовать getParentFragmentManager() Верните FragmentManager для взаимодействия с фрагментами, связанными с этим действием фрагмента.

поэтому, если вы имеете дело с фрагментами внутри фрагмента, вы будете использовать первый, а если вы имеете дело с фрагментами внутри действия, вы будете использовать второй.

Вы можете найти их здесь package androidx.fragment.app;