如何将捆绑类型中的Action类型传递给AppCompatActivity android xamarin

时间:2017-11-13 19:25:08

标签: c# android xamarin

我在MainActivity中有Action。我想将它传递给另一个ViewPagerActivity:AppCompatActivty。这是:

 Action<ImageView> btnAction = PickSelected;

    ...
     private void PickSelected(ImageView img)
        {

        }

    ...
   var intentVP = new Android.Content.Intent(this, typeof(ViewPagerActivity));
   Bundle mb = new Bundle();
   mb.PutParcelable("bundle",btnAction); // here it give me the error 
   intentVP.PutExtra("MainBundle",mb);

   StartActivity(intentVP);

接下来是错误:&#34; btnAction无法从System.Action转换为Android.OS.IParcelable&#34;。是否可以通过Action类型或有另一种方式?

1 个答案:

答案 0 :(得分:1)

我无法发表评论,所以我只会回答。

从我在这里看到的,看起来你正在使用一个Action委托,并希望根据在&#34; PickSelected&#34;中选择的内容返回结果。方法

但问题是Action委托返回void,所以你不能这样做。

相反,您需要将btnAction设为Func,并将PickSelected的签名更改为Android.OS.IParcelable(或者不需要的类型,我不会为Android编写代码),并且在您传递委托的方法中,需要调用它并传递ImageView对象。

Func<ImageView, Android.OS.IParcelable> btnAction = PickSelected;
 private Android.OS.IParcelable PickSelected(ImageView img)
    {
        //// Insert logic here

        return Android.OS.IParcelable object;
    }
var intentVP = new Android.Content.Intent(this, typeof(ViewPagerActivity));
Bundle mb = new Bundle();
mb.PutParcelable("bundle",btnAction.Invoke(ImageViewObject)); 
StartActivity(intentVP);