Xamarin Android - 如何从事件处理程序访问Activity上下文?

时间:2017-06-07 17:06:40

标签: android xamarin.android

我在Xamarin.Android应用程序中运行对WCF服务的调用,如下所示:

WCF.TestCompleted += WCF_TestCompleted;
WCF.TestAsync("stringtest");

它有一个这样的事件处理程序:

        public static void WCF_TestCompleted(object sender, TestCompletedEventArgs e)
    {
       // various code
        ListAdapter = new OrdersAdapter(this, order, orderDetail);
    }

但是我无法在这个偶数处理程序中访问我的列表适配器,因为“this”没有上下文并期望 Activity 上下文。

如何再次访问主要上下文?

通过阅读StackOverlfow上的帖子,我认为答案是:

ListAdapter = new OrdersAdapter(Application.context, order, orderDetail);

但这会返回错误:

参数1:无法从'Android.Content.Context'转换为'Android.App.Activity'

1 个答案:

答案 0 :(得分:0)

您可以在类似Facade的模式类中对WCF对象和活动的引用进行分组:

class WCFFacadeThingy()
{
    Activity myActivity;
    public WCF;
    WCFFacadeThingy(Activity activity)
    {
      myActivity = activity;

      initWCF(); //init the WCF instance in here
      WCF.TestCompleted += WCF_TestCompleted;
    }

     //Note not static method here
    public void WCF_TestCompleted(object sender, 
     TestCompletedEventArgs e)
    {
       // various code
        ListAdapter list = new OrdersAdapter(myActivity, order, orderDetail);
    } 
}

然后在你的活动的某个地方:

WCFFacadeThingy w = new WCFFacadeThingy(this);
w.WCF.TestAsync("stringtest");

如果需要销毁活动以防止内存泄漏,也可能值得将活动作为弱引用。