2017-07-25 23 views
0

私はGoogleのサインインのxamarinフォームのページでカスタムボタンレンダラーを使用しています。 Xamarinフォームの特定のページOnActivityResultを送信する方法xamarinフォームの特定のページに

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
     { 
      base.OnActivityResult(requestCode, resultCode, data); 

      if (requestCode == 9001) 
      { 
       Utilities.Configuration.UpdateConfigValue(Utilities.Constants.loggedInflag,string.Empty); 
       GoogleSignInResult result = Android.Gms.Auth.Api.Auth.GoogleSignInApi.GetSignInResultFromIntent(data); 

       if (result.IsSuccess) 
       { 

        GoogleSignInAccount acct = result.SignInAccount; 
        var token = acct.IdToken; 
        //I wan to send the 'accnt' to a Page in xamarin forms 

       } 
       else 
       { 
        //Signin Failure send response to Page in xamarin forms 
       } 
      } 
     } 
+0

使用MessagingCenter私が読ん –

+0

@YuriSどこかメッセージングセンターを使用していることが悪いです、この文脈でそれを使用するのは大丈夫ですか? –

+2

人によって好みが異なります。悪くはないです。主な懸念事項は保守性です。 –

答えて

0

Xamarin.FormsはAndroidで1つのアクティビティでのみ実行されます。したがって、あなたのurlリクエストが別のアクティビティで表示される場合は、通常のXFナビゲーションを使用する前にMainActivityに戻ってください。

ユーザーが自分のアプリに関連付けられたファイルを開くときにこれを行います。

[Activity(Label = "LaunchFileActivity")] 
public class LaunchFileActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     if (Intent.Data != null) 
     { 
      var uri = Intent.Data; 
      if (uri != null) 
      { 
       Intent i = new Intent(this, typeof(MainActivity)); 
       i.AddFlags(ActivityFlags.ReorderToFront); 
       i.PutExtra("fileName", uri.Path); 
       this.StartActivity(i); 
      } 
     } 
     this.FinishActivity(0); 
    } 
} 

そしてMainActivityで:

protected override void OnNewIntent(Intent intent) 
{ 
    base.OnNewIntent(intent); 
    Intent = intent; 
} 

protected override void OnPostResume() 
{ 
    base.OnPostResume(); 
    if (Intent.Extras != null) 
    { 
     string fileName = Intent.Extras.GetString("fileName"); 
     if (!string.IsNullOrEmpty(fileName)) 
     { 
      // do something with fileName 
     } 
     Intent.RemoveExtra("fileName"); 
    } 
} 
0

Xamarin形は、ほとんどのあなたの主な活動のようなものである一つの活性、上で実行されます。

ここで答えをしかし

  1. https://github.com/xamarin/xamarin-forms-samples/tree/master/Forms2Native
  2. https://github.com/xamarin/xamarin-forms-samples/tree/master/Native2Forms

を、見つけることができるコードのネイティブと形の部品間で通信する方法をお見せ2つのサンプルプロジェクトがありますが、あなたの質問、あなたは次のような何かをするでしょう

private const int MyRequestCode = 101; 

//Start activity for result 
var contactPickerIntent = new Intent(Intent.ActionPick, Android.Provider.ContactsContract.Contacts.ContentUri); 
context.StartActivityForResult(contactPickerIntent, MyRequestCode); 

その後、あなたの主な活動(あなたxamarinフォームアプリケーションを初期化活動(グローバルを使用して:: Xamarin.Forms.Forms.Init(この、バンドル);)

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{ 
    if (requestCode == MyRequestCode && resultCode == Result.Ok) 
    { 
    } 
} 
+0

私は別のアクティビティを開始しません。私は主な活動の詳細を持っています。このデータを自分のフォームページに送信しようとしています。その例のクラスは、活動とページ間の接続がxamarinフォームにあります。 –

+0

質問はOnActivityResult内で何をするかです。 –

+0

Xamarin.fromパラメータを持つApp()メソッドを使用し、Xamarin.forms App()メソッド –

関連する問題