2017-11-13 7 views
0

私はMainActivityでアクションを持っています。私は別のViewPagerActivityにそれを渡したい:AppCompatActivty。以下のようにここにある:バンドルタイプのアクションタイプをAppCompatActivityに渡す方法android xamarin

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); 

エラーは次である:「btnActionはAndroid.OS.IParcelableにSystem.Actionから変換することはできません」。アクション型を渡すことは可能ですか、別の方法がありますか?

答えて

1

私はコメントできませんので、私は代わりに答えます。

ここからわかるように、あなたはアクションデリゲートを使用していて、 "PickSelected"メソッドで選択されたものに基づいて結果を返すように見えます。

しかし、問題はAction delegateが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); 
関連する問題