私はタブ付きAndroidアプリを書いています。私はサンプル "FragmentSample"の古いメソッドに従っていました。うまくいきましたが、私はビューページャーに切り替えることを評価しています。 FragmentSampleでMvxTabsFragmentActivityとMvxCachingFragmentStatePagerAdapterを使用したMvvmcrossでのタブ処理
:
- TabViewModelは、個々のタブ (Vm1に、Vm2と...)のためのviewmodelのインスタンスを作成します。 TabView、各タブ断片(Tab1Fragment、
Tab2Fragment ...)において - を明示的TabViewModelで作成のviewmodel(電圧Vm1、Vm2と
...)に関連付けられています。 TabViewModelのVm1にVm1のナビゲーション初期化を行うと完璧です( Vm2)。 MvvmCross-すべての最新のサンプルプロジェクト "例" では
public class TabViewModel : BaseViewModel
{
public TabViewModel()
{
Vm1 = Mvx.IocConstruct<FirstTabViewModel>();
Vm2 = Mvx.IocConstruct<SecondTabViewModel>();
Vm3 = Mvx.IocConstruct<ThirdTabViewModel>();
}
public BaseViewModel Vm1 { get; set; }
public BaseViewModel Vm2 { get; set; }
public BaseViewModel Vm3 { get; set; }
}
public class TabView : MvxTabsFragmentActivity
{
public TabViewModel TabViewModel
{
get { return (TabViewModel)base.ViewModel; }
}
public TabView()
: base(Resource.Layout.Page_TabView, Resource.Id.actualtabcontent)
{
}
protected override void AddTabs(Bundle args)
{
AddTab<Tab1Fragment>("Tab1", "Tab 1", args, TabViewModel.Vm1);
AddTab<Tab2Fragment>("Tab2", "Tab 2", args, TabViewModel.Vm2);
// note that
AddTab<Tab3Fragment>("Tab3.1", "Tab 3.1", args, TabViewModel.Vm3);
AddTab<Tab3Fragment>("Tab3.2", "Tab 3.2", args, TabViewModel.Vm3);
AddTab<Tab3BigFragment>("Tab3.3", "Tab 3.3", args, TabViewModel.Vm3);
}
}
:
- ExampleViewPagerStateViewModelがRecyclerViewModel
- ExampleViewPagerStateFragmentのインスタンスを作成するには、タブ(RecyclerView 1 ... 5を定義します)とMvxCachingFragmentStatePagerAdapterを使用します。
- MvxCachingFragmentStatePagerAdapterが実行されると、RecyclerViewModelの別の インスタンスがExampleViewPagerStateViewModelで作成し
- RecyclerViewModelを作成されますが 建てタブに完全に無関係であるように思われます。 ExampleViewPagerStateViewModelで の作成をコメントしましたが、 のアプリの動作に変更はありませんでした。
RecyclerViewModelが2回作成されました。同じプロジェクトの ExampleViewPagerFragmentと、このサンプルXPlatformMenusの旧バージョン と同じです。
public class ExampleViewPagerStateViewModel : MvxViewModel { public RecyclerViewModel Recycler { get; private set; } public ExampleViewPagerStateViewModel() { Recycler = new RecyclerViewModel(); } } public class ExampleViewPagerStateFragment : BaseStateFragment<ExampleViewPagerStateViewModel> { protected override int FragmentId => Resource.Layout.fragment_example_viewpager_state; 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); if (viewPager != null) { var fragments = new List<MvxCachingFragmentStatePagerAdapter.FragmentInfo> { //new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 1", typeof (RecyclerViewFragment), // typeof (RecyclerViewModel)), //new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 2", typeof (RecyclerViewFragment), // typeof (RecyclerViewModel)), //new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 3", typeof (RecyclerViewFragment), // typeof (RecyclerViewModel)), //new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 4", typeof (RecyclerViewFragment), // typeof (RecyclerViewModel)), new MvxCachingFragmentStatePagerAdapter.FragmentInfo("RecyclerView 5", typeof (RecyclerViewFragment), typeof (RecyclerViewModel)) }; viewPager.Adapter = new MvxCachingFragmentStatePagerAdapter(Activity, ChildFragmentManager, fragments); } var tabLayout = view.FindViewById<TabLayout>(Resource.Id.tabs); tabLayout.SetupWithViewPager(viewPager); return view; } }
私の質問は以下のとおりです。
- "例" で ExampleViewPagerStateViewModelでRecyclerViewModelを作成するの使用は何ですか?
- FragmentSampleでは、Tab3.1 Tab3.2 Tab3.3は同じVm3を共有しています。 Can 私はViewPagerで同じことをすることができますか? ExampleViewPagerStateViewModelで作成された RecyclerViewModelに関連付けるタブビュー(RecyclerView 1 ... 5)を 指定できますが、新しいインスタンスは ではありません。
ありがとうございます。