将事件从DialogFragment提升到调用者

时间:2016-07-12 20:39:09

标签: android xamarin xamarin.android

我正在开发Xamaran.Android项目并尝试实现DialogFragment。我看了this video以设置弹出窗口。

这是我的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设置值到我的Activity并关闭DialogFragment。 我尝试使用this link的第二个答案,但无法使用getActivity();

1 个答案:

答案 0 :(得分:1)

getXYZsetXYZ得到c#yfied。这意味着Xamarin将getter和setter映射到属性中。在您的情况下,getActivityActivity的属性DialogFragment的获取者。

要传递数据,您可以

  • 为您的活动添加方法DoSomething
  • Activity投放到MainActivity或您的通话活动
  • 从您的点击监听器中调用DoSomething

<强>对话

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