我正在尝试创建一个使用基于片段的 TabView 的 GUI。该代码基于 MvvmCross 教程中的 FragmentSample。TabView 中的选项卡数量取决于从 xml 文件中读取的数据,并且每个选项卡都使用相同的片段。到目前为止一切正常。当我尝试将多态列表添加到片段时,问题就开始了。用于创建多态列表的代码与 Collection 示例中的代码基本相同(同样来自 MvvmCross 教程)。
首先,我尝试创建列表适配器并将其分配给与 TabView 关联的 Activity 中的 MvxListView(扩展 MvxTabsFragmentActivity 的类)。在那个类中,我重写了 OnViewModelSet() 方法。在覆盖中,我创建了一个扩展 MvxAdapter 的 ListAdapter 并将其分配给列表。问题是适配器中的 GetBindableView(View convertView, object dataContext, int templateId) 方法永远不会被调用,因此列表中的所有项目都通过对绑定到列表的项目调用 ToString() 方法来显示。也许值得一提的是,如果我在 .axml 文件中定义 DataTemplate,则列表可以正常工作-但不是多态的。
然后我尝试将用于创建 ListAdapter 的代码移至与片段关联的类——从 MvxFragment 派生的类——这似乎更好,因为列表位于片段内部。由于我不确定要覆盖哪个方法,我首先尝试了 OnAttach 方法,该方法在异常中产生,说此时无法使用 BindingContext。当我将代码放在片段的 Resume() 方法中时,事情终于开始工作了。对于创建适配器时所需的 Context 实例,我只使用了 base.Activity。
所以最后我的问题。上面描述的解决方案是否可以 - OnResume() 方法是创建列表适配器的方法还是我应该使用一些不同的方法。正如我所说 - 一切似乎都正常我只是不确定这是否是最好的(好的)解决方案。
我希望这篇文章不要太长——我尽量简短而不遗漏重要细节。任何建议将被认真考虑。
乌鲁斯