我已经在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