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.
}
});
答案 0 :(得分:8)
此方法已在API级别28中弃用。
使用FragmentActivity.getSupportFragmentManager()
答案 1 :(得分:8)
我使用parentFragmentManager
代替了fragmentManager
。
(如果您使用的是 androidx Fragment
。)
https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0
getFragmentManager()弃用:
getFragmentManager()
和requireFragmentManager()
上的Fragment
个方法已被弃用, 用单个getParentFragmentManager()
方法代替, 返回将FragmentManager
添加到的非nullFragment
(您可以 使用isAdded()
确定是否可以安全通话)。
答案 2 :(得分:5)
您应该改用Android支持库中的Fragment类。
android.app.Fragment在API级别28中已弃用。 使用支持库片段在所有设备上实现一致的行为并访问生命周期。
答案 3 :(得分:5)
现在,我在 Kotlin 中使用
val fragmentManager = this@className.parentFragmentManager
好吧,如果您仍然使用 Java,我认为代码是
FragmentManager manager = this.getParentFragmentManager();
希望我的回答能解决问题。
我建议您现在使用导航
答案 4 :(得分:3)
使用Support Library可以解决此问题。
根据documentation片段类已被弃用:
在API级别28中不推荐使用该类。使用支持库 片段,用于在所有设备上保持一致的行为并访问 生命周期。
答案 5 :(得分:3)
使用此
import android.support.v4.app.FragmentManager;
代替
import android.app.FragmentManager;
然后 使用此
FragmentManager manager = ((YourActivity) mContext).getSupportFragmentManager();
代替
FragmentManager manager = ((YourActivity) mContext).getFragmentManager();
答案 6 :(得分:2)
由于问题有点笼统,因此这是已迁移到androidX
的人们的解决方案。
请确保您的片段使用import
部分中的androidX版本。也就是说,如果您使用的是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
答案 7 :(得分:2)
如果您使用AndroidX Fragment androidx.fragment.app.Fragment
,则可以使用
getActivity().getSupportFragmentManager()
答案 8 :(得分:1)
对于Kotlin:
activity
?.supportFragmentManager
?. <whatever needs to come after that>
答案 9 :(得分:1)
如果要在 PreferenceFragment (特别是 android.preference.PreferenceFragment
而不是Support Preference库中的类)上显示DialogFragment,那么您将看到此内容警告。
大约在2018年6月,Google弃用了PreferenceFragment及其所有相关方法,例如getFragmentManager()
。您可能已经知道getSupportFragmentManager()
仍然不能在PreferenceFragment上使用,因为它是一个特殊的例外。
现在推荐的方法是使用AndroidX Jetpack库或“首选项支持”库中的 PreferenceFragmentCompat :
implementation "androidx.preference:preference:1.0.0"
您可以在此处查看可用的版本:https://maven.google.com->搜索“首选项”
此处有更多信息:Android- deprecated method warning regarding PreferenceActivity
请注意,迁移到PreferenceFragmentCompat可能是一个漫长而艰巨的任务,尤其是如果您具有自定义的Preference类。更多信息:
答案 10 :(得分:0)
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);
答案 11 :(得分:0)
如果我对您的理解很好,getFragmentManager()
已弃用
我们将使用getChildFragmentManager()
返回一个私有的FragmentManager,用于在此Fragment中放置和管理Fragment。
我们将使用getParentFragmentManager()
返回用于与与此片段活动相关联的片段进行交互的FragmentManager。
因此,如果您处理片段中的片段,则将使用第一个片段;如果您处理活动中的片段,则将使用第二个片段。
您可以在这里package androidx.fragment.app;
答案 12 :(得分:0)
扩展 AppCompatActivity (默认情况下扩展 FragmentActivity ),然后您可以使用 getSupportFragmentManager(),它会返回 fragmentManager strong>。