web-dev-qa-db-ja.com

Xamarin.Forms 2.5.0とコンテキスト

今日、私は Xamarin.Forms 2.5. に更新して、次の警告が表示されることを確認しました。

  • Androidサブプロジェクト:から

    警告CS0618 'Forms.Context'は廃止されました: 'Contextはバージョン2.5で廃止されました。代わりにローカルコンテキストを使用してください。

_Forms.Context_の代わりにローカルコンテキストを取得するにはどうすればよいですか? Androidコンテキストは意味ですか?

  • カスタムレンダラーから:

    警告CS0618 'ButtonRenderer.ButtonRenderer()' is obsolete: 'このコンストラクタはバージョン2.5で廃止されました。代わりにButtonRenderer(Context)を使用してください。

私のButtonRendererにはOnElementChanged()メソッドしかないので、ここで何を変更すればよいですか?単にButtonRenderer(Context)コンストラクタを追加しますか?プラットフォームレンダラークラスでこれを行った場合でも、警告が表示されます。誰かに例がありますか? 公式ドキュメント は言及しておらず、 ButtonRendererのオープンソースコード を除いて、Googleもいくつかの有用な結果をもたらしていません。この変更は、他の多くのレンダラークラスにも関係しています。

プラグインなどにブレーキをかける他の変更を経験した人はいますか?

PS:また、_Device.Windows_が廃止されたときもわかりませんでした。これを_Device.UWP_に置き換えました。

14
testing

SearchBarRendererにも同じ問題があり、修正するために必要なのは、次のようなコンストラクターを追加することだけです。

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

それがあなたの質問の2番目の部分に答えることを願っています。

23
cvanbeek

ここには2つの質問があります。

  1. カスタムレンダラーを更新してローカルコンテキストを使用するにはどうすればよいですか?
  2. Xamarin.Forms.Forms.Contextが廃止されたため、現在のコンテキストにどのようにアクセスできますか?

カスタムレンダラーを更新する方法

オーバーロードされたコンストラクターを各カスタムレンダラーに追加する

これは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
        }
    }
}

現在のコンテキストにアクセスする方法

インストール @ Motz 's CurrentActivityPlugin

これで、現在のアクティビティにアクセスする必要があるときにCrossCurrentActivity.Current.Activityを呼び出すことができます。

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

使用する Android.App.Application.Context

フォーラム でこのトピックについての議論があります

12
Jason