【发布时间】:2017-12-21 08:34:08
【问题描述】:
我想在活动中显示几个与 viewpager 共享相同视图模型的选项卡。我正在使用 MvvmCross 5.6.2。
当我在片段中执行此操作时,viewpager 会正确显示。使用相同的方法,我在一个活动中将选项卡片段添加到 viewpager,代码如下:
var viewPagerFragmentList = new List<MvxViewPagerFragmentInfo>
{
new MvxViewPagerFragmentInfo("Personal", typeof (SettingPersonalFragment), ViewModel),
new MvxViewPagerFragmentInfo("Preference", typeof (SettingPreferenceFragment), ViewModel)
};
viewPager.Adapter = new MvxCachingFragmentStatePagerAdapter(this, SupportFragmentManager, viewPagerFragmentList);
var tabLayout = FindViewById<TabLayout>(Resource.Id.tabs_fragment_setting_viewpager);
tabLayout.SetupWithViewPager(viewPager);
虽然标签片段的 OnCreate 和 OnCreateView 被执行,但标签片段没有显示在屏幕上。
我发现最新的示例 Playground 也在活动中显示标签。在示例之后,我注册了片段:
[MvxTabLayoutPresentation(TabLayoutResourceId = Resource.Id.tabs_fragment_setting_viewpager, ViewPagerResourceId = Resource.Id.viewpager_fragment_setting_viewpager, Title = "Personal", ActivityHostViewModelType = typeof(SettingViewModel))]
没有运气。我在 Playground 中找到的最后一个显示选项卡的内容是导航到片段视图模型:
_navigationService.Navigate<Tab2ViewModel>();
_navigationService.Navigate<Tab3ViewModel>();
但是,就我而言,我没有每个片段的视图模型。我手头的解决方法是将 viewpager 移动到活动中的片段。
如何在活动中显示没有自己的视图模型的 viewpager 片段?
谢谢,
尼克
【问题讨论】:
-
约克。您提到的示例将 viewpager 托管在片段中,而不是活动中。在片段中这样做没有问题。谢谢。
-
我看不出有任何理由说明它对于位于 Activity 中的 ViewPager 不起作用。我建议您继续尝试该替代方案。 Playground TestProject 在 TabsRootView/TabsRootViewModel github.com/MvvmCross/MvvmCross/tree/develop/TestProjects/… 中涵盖了该场景。您能否与我们分享一些您的 Activity 代码?
-
nmilcoff,我确实检查了 Playground 示例。如上所述,它显示了导航到 tabviewmodel 的选项卡片段。每个选项卡都需要一个视图模型,但我对所有选项卡都有一个视图模型。谢谢。