2016-04-14 6 views
1

からのアクティビティメソッドを呼び出し、このクラスは、このメソッドを得ましたthis for android:onClick="LoginUserClick"この最後のメソッドは、異なるログインアカウントを表示するためのダイアログフラグメントを作成します。私は、ユーザのログインのための<code>ToDoActiviy.cs</code>を使用していフラグメント

ダイアログフラグメント(別のクラスにあります)から、ボタンのイベントを手渡して、ダイアログフラグメントをクリックして、このメソッドをToDoActivity.csから呼び出します。ダイアログフラグメントのクラスで

私はこのようなクリックイベント手:

private void ButtonSignInFacebook_Click(object sender, EventArgs args){ 

//Here code for call to LoginUser method from 'ToDoActivity.cs' ToDoActiviy.cs act = new ToDoActivity(); act.LoginUser(); }

を私が見るに合格する必要がありますが、私は物事や任意の作品の多くを試してみました。..

誰かが私を助けることができますか?

ありがとうございます;)

+0

:あなたの活動に続いて

public class LoginFragment : Fragment { Action _onLoggedIn; public static void NewInstance(Action onLoggedIn) { var fragment = new LoginFragment(); fragment._onLoggedIn = onLoggedIn; return fragment; } private void Login() { // login user // after loggedin _onLoggedIn?.Invoke(); } } 

だからNEWINGアップフラグメントを担当するあなたのしているので、私の代わりにこのような何かをするだろう同じアクティビティにフラグメントが添付されている場合は、アクティビティへのローカル参照を取得し、そのメソッドを呼び出すことができます。 OnAttachオーバーライドをオーバーライドしてコンテキストを取得することができます。http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.content.Context) –

答えて

0

このメソッドをアクティビティから呼び出す必要があります。やってみました?

((YourActivityClassName)getActivity()).yourPublicMethod(); 

I.E.

((ToDoActivity)getActivity()).yourPublicMethod(); 
1

@ guido-gabrielの答えに少し修正を加えたいと思います。 C#構文で

、それはJavaで

((ToDoActivity)Activity).yourPublicMethod(); 

ゲッター/セッターメソッドがXamarin.Android

0

のプロパティが

あなたのフラグメントに以下切り取らを適応し、使用ゲッターセッターにマッピングされているだろう
var casted = Activity as MyActivityName; 

    if (casted != null) { 
     casted.IWantToCallThisMethodFromMyFragment(); 
    } 
+0

パラメータなしのメソッドを呼び出すと、これが機能しています: 'ToDoActivity act = new ToDoActivity(); act.LoginUser(); ' 私が使用したいメソッドは、パラメータのようなビューを必要とします。それは私の問題です。どのようなビューをパラメータのように与えるべきですか。 –

+0

ビューの参照を渡そうとしていますか?その断片自体に活動に生きる? – wishmaster

1

最後に修正しました。私はメソッドのパラメータを変更し、パラメータなしでそれを作成しなければなりませんでした。そして現在は動作しています。どちらのソリューションは良いです:

((ToDoActivity)Activity).LoginUserFacebook(); //ToDoActivity act = new ToDoActivity(); //act.LoginUserFacebook();

0

これは本当に行うには良い方法ではありません。どうして?

これは、この特定のアクティビティタイプにフラグメントを強く結合します。つまり、コード内の別の場所でフラグメントを再利用することはできません。

代わりに、イベントに登録するアクティビティや、ログイン後に必要なアクションを実行するために何らかのコールバックメソッドを実装することをお勧めします。

あなたのアクティビティには、何らかの種類の共有ライブラリに分割することができるロジックがたくさんあるように見えるかもしれません。将来、iOSなど、別のプラットフォームでそのコードを再利用することができます。活動の方法がある場合は

private void LoginUser() 
{ 
    // whatever 
} 

var loginFragment = LoginFragment.NewInstance(LoginUser); 
// fragment transaction here... 
関連する問題