如何在Android / Java中实现回调?

时间:2016-07-14 07:34:32

标签: android android-fragments xamarin.android

我已经在Xamarin中编写了一个应用程序,我正在尝试将其转移到Android工作室。

Xamarin应用程序分为模块,每个模块包含一个对象,代表模型并执行所有工作,一个Activity充当控制器并解释来自视图的消息并将它们发送到模型,以及表示视图的片段数,负责处理屏幕事件并将消息发送到活动/控制器。

每个片段在必须显示时始终被实例化为新片段。使用此代码:

    private void show_fragment(int fragment_id, string id) {
        Fragment fragment = FragmentFactory.Create(fragment_id);
        FragmentManager
            .BeginTransaction()
            .Replace(Resource.Id.content, fragment)
            .AddToBackStack(id)
            .CommitAllowingStateLoss();
    }

并且当附加片段时,它使用以下代码保持对其附加的活动的引用:

    [Obsolete] //this is for older versions of android 
    public override void OnAttach(Activity activity) {
        base.OnAttach(activity);
        do_attach(activity);
    }
    public override void OnAttach(Context context) {
        base.OnAttach(context);
        do_attach(context);
    }

    void do_attach(Context context) {
        _context = context;
        if (context is IModuleInteraction) {
            _parent = (IModuleInteraction)( context as object );
        } else {
            throw new Exception("Fragment parent type is incorrect");
        }
    }

当片段需要来自控制器的东西时,它会向其发送一个请求以及回调,例如假设用户从列表中选择了一个产品,这就是会发生的事情

在片段中

    _parent.product_selected(product_id, () => update_screen(), (message) => show_error(message) );

所以在这种情况下,控制器会尝试查找产品,如果它能找到产品,它会调用update_screen()如果不能,它会调用show_error(message)

在android studio中这一切都正常,我的问题是如何将回调传递给控制器​​?

现在我所做的就是这个

 Fragment fragment = getFragmentManager.findFragmentById(Resource.Id.content)
 if (fragment instanceOf ProductSelectFragment) {
     ProductSelectFragment psf = (ProductSelectFragment) fragment;
     if (error == null)
         psf.update_screen();
     else
         psf.show_error(error);
 }

有更好的方法吗?

提前感谢您提供的任何帮助

P.S。我使用基础FragmentManager,而不是SupportFragmentManager

0 个答案:

没有答案