2016-07-12 14 views
0

我正在研究Xamaran.Android項目並嘗試實現DialogFragment。我看了this video爲了設置Popup。從DialogFragment引發事件到調用者

這裏是我的DialogFragment的代碼:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    base.OnCreateView(inflater, container, savedInstanceState); 

    var view = inflater.Inflate(Resource.Layout.WordChooser, container, false); 

    SubmitButton = view.FindViewById<Button>(Resource.Id.SubmitButton); 
    SubmitButton.Click += SubmitButton_Click; 

    return view; 
} 

private void SubmitButton_Click(object sender, EventArgs e) 
{ 

} 

,這裏是我的活動呼叫者:

private void FooButton_Click(object sender, EventArgs e) 
{ 
    var trasaction = FragmentManager.BeginTransaction(); 
    WordChooser wordChooserDialog = new WordChooser(); 

    wordChooserDialog.Show(trasaction, "word chooser fragment"); 
} 

我不知道如何從我的DialogFragment設定值到我的活動,並關閉DialogFragment。 我tryed使用的this link第二答案,但無法使用getActivity();

回答

1

getXYZsetXYZ都會得到C#yfied。這意味着Xamarin正在將getter和setter映射到屬性中。在你的情況下,getActivityDialogFragment的財產Activity的吸氣劑。

來傳遞數據,你可以

  • 添加一個方法DoSomething到你的活動
  • ActivityMainActivity或什麼都你的電話活動是
  • 呼叫DoSomething從點擊監聽

Dialog

private void SubmitButton_Click(object sender, EventArgs e) 
{ 
    ((MainActivity) Activity).DoSomething("something"); 
    Dismiss(); 
} 

活動

public class MainActivity : Activity 
{ 
    //... 

    public void DoSomething(string something) 
    { 

    } 
} 

還有一些其他可能的解決方案,如

  • 傳遞一個回調到您的片段
  • 添加事件到您的片段
  • .. 。

重要

不要忘記做你的註銷事件處理程序。每個+=應該有一個-=對應的代碼中的某處。例如。在關閉碎片之前,請使用SubmitButton.Click -= SubmitButton_Click

+0

所以我不明白爲什麼在這個Xamarin文檔[鏈接](https://developer.xamarin.com/api/type/Android.App.DialogFragment/),有這樣一行代碼:'( (FragmentDialog)getActivity())。showDialog();'? –

+0

如果你仔細閱讀,你會發現,這些都是** java的例子**。我猜Xamarin正在從谷歌文檔中獲取文檔。除文檔資料外:我的答案是否能解決您的問題? –

+0

非常感謝! –