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;
}
如果有更好的解决方案,请不要害羞! =)
你好西里亚克语
我目前正在尝试在我的应用程序中为平板电脑布局实现复合视图,因此我不需要 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;
}
如果有更好的解决方案,请不要害羞! =)
你好西里亚克语