代码之家  ›  专栏  ›  技术社区  ›  Prescott Chartier

从过时的FragementManager过渡到Android。支持.V4.App版本

  •  0
  • Prescott Chartier  · 技术社区  · 5 年前

    我有好几个 DialogFragement 在我的应用程序中,我需要转换到 Android.Support.V4.App.DialogFragment 所以我的应用程序与API 29(Q)兼容。我首先将“更改密码”对话框片段代码转换为:

    class ChangePassword : Android.Support.V4.App.DialogFragment 
    {
        public event DialogEventHandler Dismissed;
        public string selection = "";
        private int error = 0;
        public User MyUser;
    
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView(inflater, container, savedInstanceState);
            View view = inflater.Inflate(Resource.Layout.ChangePassword, container, false);
            Button ok = view.FindViewById<Button>(Resource.Id.button_ok);
            EditText currentPassword = view.FindViewById<EditText>(Resource.Id.currentPassword);
            EditText newPassword1 = view.FindViewById<EditText>(Resource.Id.newPassword1);
            EditText newPassword2 = view.FindViewById<EditText>(Resource.Id.newPassword2);
            ok.Click += (sender, args) =>
            {
                if (currentPassword.Text != "" && (newPassword1.Text.ToUpper () == newPassword2.Text.ToUpper()) && (newPassword1.Text != "" || newPassword2.Text != ""))
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                    OMLDataInterfaceWeb.OMLDataInterface datainterface = new OMLDataInterfaceWeb.OMLDataInterface();
                    try
                    {
                        datainterface.ChangeUserPassword(MyUser.Username, currentPassword.Text, newPassword1.Text);
                    }
                    catch (Exception e)
                    {
                        error = 1;
                        Utils.showMessage(e.Message, "Error");
                    }
    
                    if (error == 0)
                    {
                        selection = newPassword2.Text;
                        if (null != Dismissed)
                            Dismissed(this, new DialogEventArgs { Selection = selection });
                    }
                }
                else
                {
                    if (currentPassword.Text == "")
                    {
                        // Android.Content.Context context = new AppContext() ;
                        Utils.showMessage("Enter the current password.","ERROR");
                    }
                    else
                    {
                        if (newPassword1.Text == "")
                        {
                            Utils.showMessage("The first new password field is blank.", "ERROR");
                        } else if (newPassword2.Text == "")
                        {
                            Utils.showMessage("Please re-enter the new password.", "ERROR");
    
                        } else if (newPassword1.Text.ToUpper() != newPassword2.Text.ToUpper())
                        {
                            Utils.showMessage("The passwords do not match.", "ERROR");
                        }
                    }
                }
            };
    
            return view;
        }
        public override void OnResume()
        {
            int width = 900; 
            int height = 900;
            Dialog.Window.SetLayout(width, height);
            base.OnResume();
        }
    }
    

    注意,我正在使用 相对于 Android.App.DialogFragment .

    我通过单击按钮从另一个活动调用此代码:

            btnChangePassword.Click += (sender, e) =>
            {
                Android.Support.V4.App.FragmentTransaction transcation = FragmentManager; //FragmentManager;    // FragmentManager.BeginTransaction();
                ChangePassword changePassword = new ChangePassword();
                changePassword.MyUser = MyUser;
                changePassword.Show(transcation, "Dialog");
    
                changePassword.Dismissed += (s, a) => {
                    /* do something with e.Selection here */
    
                    if (a.Selection.ToUpper() != "")
                    {
                        ChangePassword _exportFragment = (ChangePassword)FragmentManager.FindFragmentByTag("Dialog");
                        if (_exportFragment != null)
                        {
                            _exportFragment.Dismiss();
                        }
                        changedPassword = true;
                       thePassword = a.Selection;
                    }
                    else
                    {
                        Toast.MakeText(this, "Enter new password.", ToastLength.Long).Show();
                    }
                };
    
            };
    

    我在按钮点击代码中得到两个错误,第一个是 Cannot implicitly convert type 'Android.App.FragmentManager' to 'Android.Support.V4.App.FragmentTransaction 发生在这行代码上 Android.Support.V4.App.FragmentTransaction transcation = FragmentManager; ,假设我也有资格 FragmentManager 具有 Android.Support.V4.App. ,我将代码改为 Android.Support.V4.App.FragmentTransaction transcation = Android.Support.V4.App.FragmentManager; ,这就产生了错误 'FragmentManager' is a type, which is not valid in the given context Cannot convert type 'Android.App.Fragment' to 'MyAndroidApp.ChangePassword' 发生在线路上 ChangePassword _exportFragment = (ChangePassword)FragmentManager.FindFragmentByTag("Dialog");

    0 回复  |  直到 5 年前
        1
  •  0
  •   Prescott Chartier    5 年前

            btnChangePassword.Click += (sender, e) =>
            {
    
                Android.Support.V4.App.FragmentTransaction transcation = SupportFragmentManager.BeginTransaction();
                ChangePassword changePassword = new ChangePassword();
                changePassword.MyUser = MyUser;
                changePassword.Show(transcation, "Dialog");
    
                changePassword.Dismissed += (s, a) => {
                    /* do something with e.Selection here */
    
                    if (a.Selection.ToUpper() != "")
                    {
                        ChangePassword _exportFragment = (ChangePassword)SupportFragmentManager.FindFragmentByTag("Dialog");
                        if (_exportFragment != null)
                        {
                            _exportFragment.Dismiss();
                        }
                        changedPassword = true;
                       thePassword = a.Selection;
                    }
                    else
                    {
                        Toast.MakeText(this, "Enter new password.", ToastLength.Long).Show();
                    }
                };