2017-06-12 10 views
1

私はタブ付き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)を 指定できますが、新しいインスタンスは ではありません。

ありがとうございます。

答えて

0

FragmentInfoの3番目のパラメータをRecyclerViewModelで作成されたRecyclerに変更することで実現できることがわかりました。サンプルは変更を加える必要があります。

関連する問題