Java 由于Android getFragmentManager()API已被弃用,是否有其他选择?

Java 由于Android getFragmentManager()API已被弃用,是否有其他选择?,java,android,Java,Android,FragmentManager已弃用。有其他选择吗?或者我现在可以做什么 PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); autocompleteFragment.setOnPlaceSelectedListener(new Pl

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.
            }
        });

请使用解决此问题的方法

根据已弃用的片段类:

该类在API级别28中被弃用。使用支持库 用于在所有设备上实现一致行为并访问 生命周期


您应该改用Android支持库中的片段类

在API级别28中被弃用。 使用支持库片段在所有设备上实现一致的行为,并访问生命周期


改为使用。

此方法在API级别28中被弃用


使用
FragmentActivity.getSupportFragmentManager()

由于问题有点广泛,下面是迁移到
androidX
的用户的解决方案

确保您的片段在
import
部分中使用的是androidX版本。i、 e如果使用的是
DialogFragment()
,请替换

import android.app.DialogFragment

然后,对于
fragmentManager
show()
打开对话框时,如果从另一个
fragment
启动,不要更改它,但是如果从
活动传递,首先从
FragmentActivity()
扩展活动,然后传递
supportFragmentManager

// kotlin
import androidx.fragment.app.FragmentActivity

class MyActivity: FragmentActivity() {
    ...
    val myDialog = MyDialog()
    myDialog.show(supportFragmentManager, TAG)
    ...
}
Althogh如果您尚未迁移到
androidX
,同样的步骤也适用于
support.v4
。只是在第一步更换

import android.app.DialogFragment

Xml


如果我理解你的话,
getFragmentManager()
现在已经被弃用了

我们将使用
getChildFragmentManager()
返回一个私有FragmentManager,用于在此片段中放置和管理片段

我们将使用
getParentFragmentManager()
返回FragmentManager,以便与与此片段的活动关联的片段进行交互

因此,如果处理片段内部的片段,您将使用第一个片段,如果处理活动内部的片段,您将使用第二个片段


你可以在这里找到它们
包androidx.fragment.app

扩展AppCompatActivity默认情况下扩展FragmentActivity,然后您可以使用getSupportFragmentManager()为Kotlin返回fragmentManager

activity
    ?.supportFragmentManager
    ?. <whatever needs to come after that>
活动
?支持碎片管理器
?. 
使用此

import android.support.v4.app.FragmentManager;
FragmentManager manager = ((YourActivity) mContext).getSupportFragmentManager();
而不是

import android.app.FragmentManager;
及 用这个

FragmentManager manager = ((YourActivity) mContext).getSupportFragmentManager();
而不是

 FragmentManager manager = ((YourActivity) mContext).getFragmentManager();

我使用了
parentFragmentManager
而不是
fragmentManager
。 (如果您使用的是androidx
Fragment

getFragmentManager()弃用
getFragmentManager()
requireRefragmentManager()
片段上的方法已被弃用,并且 替换为单个
getParentFragmentManager()
方法,该方法 返回添加到的非空
FragmentManager
片段(您可以 使用
isAdded()
确定调用是否安全)


如果在首选项片段上显示对话框片段(特别是
android.preference.PreferenceFragment
而不是支持首选项库中的类),则会看到此警告

大约在2018年6月,谷歌弃用了PreferenceFragment及其所有相关方法,如
getFragmentManager()
。您可能已经知道,
getSupportFragmentManager()
无论如何都不能用于PreferenceFragment,因为这是一个特殊的例外

现在推荐的方法是使用AndroidX Jetpack库或首选项支持库中的首选项FragmentCompat

implementation "androidx.preference:preference:1.0.0"
您可以在此处查看可用版本:->搜索“首选项”

更多信息请点击此处:


请注意,迁移到PreferenceFragmentCompat可能是一项漫长而困难的任务,尤其是在您有自定义首选项类的情况下。更多信息:


如果您使用AndroidX Fragment
AndroidX.Fragment.app.Fragment
您可以使用

getActivity().getSupportFragmentManager()

现在,在科特林我用

val fragmentManager = this@className.parentFragmentManager
如果您仍然使用Java,我认为代码是

FragmentManager manager = this.getParentFragmentManager();
希望我的回答能解决这个问题


我建议您立即使用导航

欢迎使用Stackoverflow。请看这里,了解如何提问:请阅读-总结是,这不是一种理想的解决志愿者问题的方法,可能会对获得答案产生反作用。请不要将此添加到您的问题中。@VicJordan:请不要在标题中添加“自制标签”;我们不鼓励这样做,因为我们有一个合适的标签系统。自然句和语法句更好,无论是陈述句还是疑问句。这是。(对于您自己的问题标题,也请遵循此建议,谢谢!)。请注意,AppCompatActivity扩展了FragmentActivity,因此您也可以使用它。您将此
getSupportFragmentManager()
称为哪个类?请给出一个更详细的例子,请参考这里包含的包:有时,他们更改方法名称只是为了搞乱我们
getActivity().getSupportFragmentManager()
val fragmentManager = this@className.parentFragmentManager
FragmentManager manager = this.getParentFragmentManager();