MVVMCross 4.1.4 复合视图

MVVMCross 4.1.4 Composite Views

我目前正在尝试在我的应用程序中为平板电脑布局实现复合视图,因此我不需要 phone 布局中使用的 Viewpager 和 TabLayout。

但显然它并不像我想象的那么容易,我发现 examples/tutorials 是为旧版本的 MVVMCross 制作的。

我的想法只是搜索 viewpager,如果在当前布局中找不到它,则检查框架布局并显示我的两个不同的视图模型,就像我为 Viewpager/Tablayout 使用 MvxFragmentPagerAdapter 所做的那样。

是否有任何 "clean" 解决方案?

感谢您的宝贵时间!

我使用 FragmentTransactions 找到了可接受的答案。这是简化的代码。虽然我有点滥用 MvxFragmentPagerAdapter.GetItem(index) 这里的片段和 ViewModel 初始化 (https://github.com/MvvmCross/MvvmCross-AndroidSupport/blob/master/MvvmCross.Droid.Support.V4/MvxFragmentPagerAdapter.cs) :

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = base.OnCreateView(inflater, container, savedInstanceState);
        var viewPager = view.FindViewById<ViewPager>(Resource.Id.viewpager);
        var fragments = new List<MvxFragmentPagerAdapter.FragmentInfo> {
          new MvxFragmentPagerAdapter.FragmentInfo("Fragment1", typeof(FragmentOne),
           typeof(FragmentViewModelOne)),
          new MvxFragmentPagerAdapter.FragmentInfo("Fragment2", typeof(FragmentTwo),
           typeof(FragmentViewModelTwo))
         };
        var adapter = new MvxFragmentPagerAdapter(Activity, ChildFragmentManager, fragments);
        if (viewPager != null)
        {
            viewPager.Adapter = adapter;
            var tabLayout = view.FindViewById<TabLayout>(Resource.Id.tabs);
            if (tabLayout != null)
            {
                tabLayout.SetupWithViewPager(viewPager);
            }
        }
        else
        {
            FragmentTransaction transaction = FragmentManager.BeginTransaction();
            transaction.Replace(Resource.Id.frameone, adapter.GetItem(0), "Fragment1");
            transaction.Replace(Resource.Id.frametwo, adapter.GetItem(1), "Fragment2");
            transaction.Commit();
        }
        return view;
    }

如果有更好的解决方案,请不要害羞! =)

你好西里亚克语