簡體   English   中英

從Fragment調用Activity方法

[英]Call an Activity method from Fragment

我使用ToDoActiviy.cs進行用戶登錄,此類獲得了以下方法:

[Java.Interop.Export()]

public async void LoginUser(View view) { if(await authenticate())..

這種方法是從按鈕組件.axml文件名為android:onClick="LoginUser"我改變了這對android:onClick="LoginUserClick"這最后的方法創建顯示不同的登錄帳戶的對話片段。

現在,從Dialog Fragment(位於另一個類上)中,我想將按鈕的事件交給對話框片段,然后從ToDoActivity.cs調用此方法。

在對話框片段類上,我將click事件傳遞給這樣的事件:

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

我需要通過一個視圖,但是我嘗試了很多事情和任何工作。

有人可以幫我嗎?

提前致謝 ;)

我想對@ guido-gabriel的答案進行一些修改。

在C#語法中,它將是

((ToDoActivity)Activity).yourPublicMethod();

Java中的Getter / Setter方法映射到Xamarin.Android中的Getter Setter屬性

終於我解決了! 我不得不更改方法的參數,並創建沒有參數的方法..現在可以正常工作了。 兩種解決方案都不錯:

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

您必須從活動中調用方法。 你有沒有嘗試過?

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

IE瀏覽器

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

調整並使用片段中的以下片段

var casted = Activity as MyActivityName;

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

這確實不是一個好習慣。 為什么?

這樣做會使Fragment與該特定的Activity類型緊密相關,這意味着將無法在代碼的其他地方重用Fragment。

相反,我建議您依靠Activity訂閱事件或實現某種回調方法,以便在登錄后執行所需的操作。

似乎您的“活動”中可能包含許多邏輯,這些邏輯可以拆分為某種共享庫。 將來可以在其他平台(例如iOS)上重用該代碼。

因此,由於您負責更新Fragment,因此我將執行以下操作:

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

然后在您的活動中:

private void LoginUser()
{
    // whatever
}

var loginFragment = LoginFragment.NewInstance(LoginUser);
// fragment transaction here...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM