web-dev-qa-db-fra.com

Xamarin.Forms 2.5.0 et contexte

Aujourd'hui, j'ai mis à jour Xamarin.Forms 2.5. et j'ai vu que j'obtenais les avertissements suivants:

  • Depuis le sous-projet Android:

    Avertissement CS0618 'Forms.Context' est obsolète: 'Le contexte est obsolète à partir de la version 2.5. Veuillez utiliser un contexte local à la place. '

Comment puis-je obtenir le contexte local au lieu de Forms.Context? Le contexte Android signifie-t-il?

  • Depuis le moteur de rendu personnalisé:

    Avertissement CS0618 'ButtonRenderer.ButtonRenderer ()' est obsolète: 'Ce constructeur est obsolète à partir de la version 2.5. Veuillez utiliser ButtonRenderer (Context) à la place. '

Dans mon ButtonRenderer je n'ai que la méthode OnElementChanged(), alors que dois-je changer ici? Ajoutez simplement un constructeur ButtonRenderer(Context)? Je reçois toujours l'avertissement, si je le fais dans ma classe de rendu de plate-forme. Quelqu'un at-il un exemple? Le documentation officielle ne le mentionne pas et Google n'apporte pas non plus de résultats utiles, à l'exception du code open source de ButtonRenderer . Cette modification concerne également de nombreuses autres classes de rendu.

Quelqu'un a-t-il connu d'autres changements, qui freinent les plugins, etc.?

PS: Je n'ai pas non plus su quand Device.Windows Était devenu obsolète. Maintenant, je l'ai remplacé par Device.UWP.

12
testing

J'ai eu ce même problème pour un SearchBarRenderer et tout ce que je devais faire pour le corriger était d'ajouter un constructeur comme ceci:

public ShowSearchBarRenderer(Context context) : base(context)
{
}

J'espère que cela répond à la deuxième partie de votre question.

21
cvanbeek

Il y a deux questions ici:

  1. Comment mettre à jour des rendus personnalisés pour utiliser un contexte local?
  2. Comment puis-je accéder au contexte actuel maintenant que Xamarin.Forms.Forms.Context est obsolète?

Comment mettre à jour des rendus personnalisés

Ajoutez le constructeur surchargé à chaque moteur de rendu personnalisé

Voici un exemple utilisant un ButtonRenderer

[Assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace MyApp.Droid
{
    public class CustomButtonRenderer : ButtonRenderer
    {
        public CustomButtonRenderer(Context context) : base(context)
        {

        }

        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            //ToDo: Customize Button
        }
    }
}

Comment accéder au contexte actuel

Installez @ Motz 's CurrentActivityPlugin .

Maintenant, vous pouvez appeler CrossCurrentActivity.Current.Activity lorsque vous devez accéder à l'activité en cours.

Voici un exemple de la façon d'ouvrir les paramètres de l'application dans Xamarin.Forms.

[Assembly: Dependency(typeof(DeepLinks_Android))]
namespace MyApp.Droid
{
    public class DeepLinks_Android : IDeepLinks
    {
        Context CurrentContext => CrossCurrentActivity.Current.Activity;

        public Task OpenSettings()
        {
            var myAppSettingsIntent = new Intent(Settings.ActionApplicationDetailsSettings, Android.Net.Uri.Parse("package:" + CurrentContext.PackageName));
            myAppSettingsIntent.AddCategory(Intent.CategoryDefault);

            return Task.Run(() =>
            {
                try
                {
                    CurrentContext.StartActivity(myAppSettingsIntent);
                }
                catch (Exception)
                {
                    Toast.MakeText(CurrentContext.ApplicationContext, "Unable to open Settings", ToastLength.Short);
                }
            });
        }
    }
}
12
Brandon Minnick

utilisation Android.App.Application.Context

Il y a une discussion de ce sujet sur le Forums

11
Jason