Xamarin:过时的Forms.Context和AlertDialog.Builder

时间:2017-12-05 14:53:21

标签: xamarin.forms android-alertdialog android-context

我曾经像这样创建它

[OrderedDict([('Device', 'Energy [kWh]'),
              ('Measure', '0.01'),
              ('Time', '2017-12-01T13:54:04')]),
 OrderedDict([('Device', 'Voltage [V]'),
              ('Measure', '221.64'),
              ('Time', '2017-12-01T13:54:04')]),
 OrderedDict([('Device', 'Current [A]'),
              ('Measure', '0.08'),
              ('Time', '2017-12-01T13:54:04')])]

它工作正常。但是Forms.Context现在已经过时了,所以我把它改成了

        AlertDialog.Builder b = new AlertDialog.Builder( Forms.Context );

现在它崩溃了

        AlertDialog.Builder b = new AlertDialog.Builder( Android.App.Application.Context );

我尝试了替代构造函数

Android.Content.Res.Resources+NotFoundException: Resource ID #0x0

崩溃
        AlertDialog.Builder b = new AlertDialog.Builder( Android.App.Application.Context, Resource.Style.Theme_AppCompat_Light );

那么我在XF2.5中传递给AlertDialog.Builder()的上下文是什么?我不想为此安装第三方库。

1 个答案:

答案 0 :(得分:0)

一种方法是在Main Activity中创建一个静态变量,如下所示

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    internal static MainActivity Instance { get; private set; }

    protected override void OnCreate(Bundle bundle)
    {
        ...
        global::Xamarin.Forms.Forms.Init(this, bundle);
        Instance = this;
        LoadApplication(new App());
    }
}

在你的代码中像这样引用它

AlertDialog.Builder b = new AlertDialog.Builder( MainActivity.Instance );

有关详细信息和实现此目的的其他方法,see David Britchs blog post