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
。
(如果您使用的是androidxFragment
)
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 FragmentAndroidX.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();