2016-05-10 8 views
0

Iamは現在、自分のアプリでタブレットレイアウトのコンポジットビューを実装しようとしているので、電話レイアウトで使用されるViewPagerとTabLayoutは必要ありません。MVVMCross 4.1.4コンポジットビュー

しかし、明らかに、それは私が思ったほど簡単ではないし、私が見つけたサンプル/チュートリアルはMVVMCrossの古いバージョン用に作られている。

私のアイデアは、現在のレイアウトに見つからない場合はビューページを検索し、フレームレイアウトをチェックし、Viewpager/TablayoutのMvxFragmentPagerAdapterで行ったように2つの異なるビューモデルを表示することでした。

これには「クリーンな」ソリューションがありますか?

ありがとうございます!

答えて

0

FragmentTransactionsを使用して、許容できる回答が見つかりました。ここに簡略化されたコードがあります。 IAMはちょっとフラグメントとViewModelに初期化(https://github.com/MvvmCross/MvvmCross-AndroidSupport/blob/master/MvvmCross.Droid.Support.V4/MvxFragmentPagerAdapter.cs)はこちらMvxFragmentPagerAdapter.GetItem(インデックス)を悪用けれども:

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; 
    } 

をよりよい解決策がある場合は、いけない恥ずかしがら! =)

ご挨拶Cyriac

関連する問題