Xamarin Android.App.DialogFragment已过时

时间:2018-08-20 17:34:44

标签: android android-fragments xamarin xamarin.android

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)

3 个答案:

答案 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 {