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;