2017-11-21 130 views
8

Dziś zaktualizowałem do Xamarin.Forms 2.5.0 i zobaczyłem, że mam następujące ostrzeżenia:Xamarin.Forms 2.5.0 i kontekst

  • Od Android podprojektu: CS0618

    Ostrzeżenie „Forms.Context "jest przestarzały:" Kontekst jest przestarzały od wersji 2.5. Zamiast tego użyj kontekstu lokalnego. "

Jak mogę uzyskać lokalny kontekst zamiast Forms.Context? Is the Android Context meant?

  • Z niestandardowego renderujący:

    ostrzegawczy CS0618 'ButtonRenderer.ButtonRenderer()' jest nieaktualny: „Konstruktor jest zbyteczne, ponieważ w wersji 2.5. Zamiast tego użyj ButtonRenderer (kontekst). "

W moim ButtonRenderer Mam tylko metodę OnElementChanged(), więc co mam tu zmienić? Po prostu dodaj konstruktora ButtonRenderer(Context)? Nadal dostaję ostrzeżenie, jeśli zrobię to w mojej klasie renderer platformy. Czy ktoś ma przykład? The official documentation nie wspomina o tym i Google nie przynosi również użytecznych wyników, z wyjątkiem open source code of ButtonRenderer. Ta zmiana dotyczy również wielu innych klas renderer.

Czy ktoś doświadczył innych zmian, które blokują wtyczki i tak dalej?

PS: Nie odkryłem również, że Device.Windows jest przestarzałe. Teraz zamieniłem go na Device.UWP.

Odpowiedz

8

miałem ten sam problem na SearchBarRenderer i wszystko, co potrzebne do zrobienia, aby naprawić było dodać konstruktora tak:

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

Mam nadzieję, że odpowiedź na drugą część pytania.

+2

Musiałem również dodać 'using Android.Content;' –

7

użycie Android.App.Application.Context

Jest dyskusja na ten temat na Forums

+0

Jakiekolwiek minusy tego? Bezpośrednia kopia i zamiana Forms.Context? Chciałbym uniknąć wprowadzenia wtyczki, jeśli to w ogóle możliwe. Dzięki! – aherrick

+0

Spowoduje to zatrzymanie wszystkich elementów sterujących wymagających kompozycji AppCompat. –

6

Istnieją dwa pytania tutaj:

  1. Jak zaktualizować niestandardowe renderujących skorzystać z lokalnego kontekstu?
  2. Jak mogę uzyskać dostęp do bieżącego kontekstu, ponieważ Xamarin.Forms.Forms.Context jest przestarzały?

Jak zaktualizować niestandardowe Renderers

Dodaj przeciążony Konstruktor do każdego niestandardowego renderujący

Oto przykład przy użyciu ButtonRenderer

Jak uzyskać dostęp do bieżącego kontekstu

Zainstaluj @Motz 's ' s .

Teraz, gdy możesz zadzwonić pod numer CrossCurrentActivity.Current.Activity, gdy potrzebujesz dostępu do bieżącego działania.

Oto przykład, jak otworzyć Ustawienia aplikacji w 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); 
       } 
      }); 
     } 
    } 
}