代码之家  ›  专栏  ›  技术社区  ›  Rabadash8820

xamarin android.app.dialogfragment已过时

  •  4
  • Rabadash8820  · 技术社区  · 6 年前

    DR 有人知道为什么吗 Android.App.DialogFragment 在Xamarin中是过时的,更重要的是,推荐什么类?

    更多信息:

    我的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 is obsolete”时除了 this old 论坛帖子推荐给 使用 过时的API,最糟糕的是, DialogFragment API documentation 甚至不显示类已过时!

    某些版本信息:

    xamarin.forms nuget:v3.1.0.697729
    Visual Studio 2017:v15.8.1版
    目标框架:Android 9.0(P)
    最低安卓版本:安卓5.0(API 21级-棒棒糖)
    目标Android版本:Android 9.0(API级别27-OREO)

    2 回复  |  直到 6 年前
        1
  •  2
  •   SushiHangover    6 年前

    看看android文档,它在android中已被弃用。 IE/API 28级。假设Xamarin文档最终将得到更新,因为Android P于2018年8月6日刚刚发布,但我建议始终查看链接的 官方的 Android文档。

    重新: https://developer.android.com/reference/android/app/DialogFragment

    该类在API级别28中已被弃用。

    使用支持库对话框片段在所有设备上实现一致的行为并访问生命周期。

    所以,是的,支持库就是未来(好吧……就是未来)。 Android.Support.V4.App.Fragment 目前,这些都已被Android扩展库所取代。( AndroidX )并且所有未来的更新都将在那些Androidx库中进行,只对支持库应用了错误/安全修复。

    28.0.0的稳定版本将是最后一个打包为android.support的功能版本。所有后续的功能版本将只作为Androidx打包的工件提供。

    重新: https://android-developers.googleblog.com/2018/05/hello-world-androidx.html

        2
  •  0
  •   Rabadash8820    6 年前

    @宿醉的回答解释了我的问题。

    为了有一个 沙马林 代码示例在Internet上的某个地方,下面是最终为我工作的代码:

    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 财产。