[英]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.