TL; DR 有人知道Xamarin为什么Android.App.DialogFragment
过时,更重要的是,推荐使用什么类?
更多信息:
我在Xamarin.Android应用中收到以下警告:
警告CS0618'DialogFragment'已过时:'此类已在此android平台中废弃' 警告CS0618“ Activity.FragmentManager”已过时:“已弃用”
来自以下代码:
using Android.App;
void onClick(int pos) {
DialogFragment newFragment = new UsernameDialogFragment(_scans[pos]);
newFragment.Show(_activity.FragmentManager, "dialog");
}
public class UsernameDialogFragment : DialogFragment {
public override Dialog OnCreateDialog(Bundle savedInstanceState) {
var builder = new AlertDialog.Builder(Activity);
// Build the dialog...
return builder.Create();
}
}
请注意,我正在使用Android.App.DialogFrament
类,而不是Android.Support.V4.App
中的类。 onClick
方法是RecyclerView.Adapter
的一部分。
对于Xamarin这样的问题,令我感到沮丧的是,几乎没有足够的文档。 IntelliSense警告不建议使用其他API,谷歌搜索“ DialogFrament已过时”,除this old论坛帖子建议使用过时的API外,其他与Xamarin相关的内容均未发现,更糟糕的是总而言之,DialogFragment
API documentation甚至没有表明该类已经过时了!
某些版本信息:
Xamarin.Forms NuGet:v3.1.0.697729
Visual Studio 2017:v15.8.1
目标框架:Android 9.0(P)
最低Android版本:Android 5.0(API级别21-Lollipop)
目标Android版本:Android 9.0(API级别27-Oreo)
答案 0 :(得分:2)
看看Android文档,它在Android P ie / API Level 28中已弃用。假设Xamarin文档最终将在Android P于2018年8月6日发布时得到更新,但我会建议始终查看链接的官方 Android文档。
re:https://developer.android.com/reference/android/app/DialogFragment
该类已在API级别28中弃用。
使用支持库DialogFragment在所有设备上保持一致的行为并访问生命周期。
是的,支持库是未来的(嗯...是未来),目前Android.Support.V4.App.Fragment
,但是这些库已被Android扩展库(AndroidX
)和将来所有的更新都将在这些AndroidX库中,并且仅将错误/安全修复程序应用于支持库。
28.0.0的稳定版本将成为打包为android.support的最终功能版本。所有后续功能版本将仅以androidx打包的工件形式提供。
re:https://android-developers.googleblog.com/2018/05/hello-world-androidx.html
答案 1 :(得分:1)
@SushiHangover的回答解释了我的问题。
为了在互联网上的某个地方提供 Xamarin 代码示例,下面的代码最终对我有用:
using Android.Support.V4.App;
void onClick(int pos) {
var fragment = new UsernameDialogFragment();
fragment.Show(_activity.SupportFragmentManager, nameof(UsernameDialogFragment));
}
public class UsernameDialogFragment : DialogFragment {
public override Dialog OnCreateDialog(Bundle savedInstanceState) {
var builder = new AlertDialog.Builder(Activity);
// Build the dialog...
return builder.Create();
}
}
请注意,_activity
必须继承Android.Support.V4.App.FragmentActivity
,否则您将看不到SupportFragmentManager
属性。
答案 2 :(得分:0)
你可以使用androidx库,它运行良好
公共类 NewDonorFragment(您的片段名称):AndroidX.Fragment.App.DialogFragment {