2017-11-08 6 views
1

私はStarWarsEaxmpleをMvvmCrossリポジトリから使用しており、動作させることはできません。 MvvmCrossの出力、私の意見では、MvvmCrossの別のバージョンまたはPresenterのいずれかに問題があります。 サンプルのバージョンは5.1.1で、私のプロジェクトでは5.4.2です。そして奇妙な行動を示しています。MvvmCrossのバージョンでDrawerMenuを作成するには? v。5.4.2

私はMvvmCross NavigationServiceに関係していないときに空のドロワーを見ることができます。しかし、両方のViewModelsに連続してナビゲートすると(例のように)、メニューページのみが表示され、引き出しがなくなり、他のページフレームも呼び出されません。

Reference to MvvmCross Sample

主な活動

[Activity(Icon = "@drawable/icon", 
    Theme = "@style/AppTheme", LaunchMode = LaunchMode.SingleTop, 
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
public class MainActivity : MvxCachingFragmentCompatActivity<MainViewModel> 
{ 
    public DrawerLayout DrawerLayout; 
    //This method is invoked 
    protected override void OnCreate(Bundle bundle) 
    {   base.OnCreate(bundle); 
     SetContentView(Resource.Layout.activity_main); 

     DrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout); 

     ViewModel.ShowDefaultMenuItem(); 
    } 
.... 

メニューフラグメント

[MvxFragment(typeof(MainViewModel), Resource.Id.navigationFrame)] 
[Register("VacationManager.Droid.Activities.MenuFragment")] 
public class MenuFragment : MvxFragment<MenuViewModel>, NavigationView.IOnNavigationItemSelectedListener 
{ 
    private NavigationView _navigationView; 
    private IMenuItem _previousMenuItem; 

    //This method is invoked too 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     base.OnCreateView(inflater, container, savedInstanceState); 
     var view = this.BindingInflate(Resource.Layout.menu_view, null); 

     _navigationView = view.FindViewById<NavigationView>(Resource.Id.navigation_view); 
     _navigationView.SetNavigationItemSelectedListener(this); 

     return view; 
    } 
} 

ページ

012の主要部分
[MvxFragment(typeof(MainViewModel), Resource.Id.bodyFrame, false)] 
[Register("VacationManager.Droid.Activities.VacationRequestListFragment")] 
public class VacationRequestListFragment : BaseFragment<VacationRequestListViewModel> // You can find BaseFragment in sample 
{ 
    protected override int FragmentId => Resource.Layout.fragment_list; 
    //It is never invoked 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 
     return this.BindingInflate(Resource.Layout.fragment_list, container, false); 
    } 
} 

メインページレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:local="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/drawerLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/warning"> 

     <!-- Center Side --> 


     <android.support.design.widget.CoordinatorLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/mainFrame"> 

      <include layout="@layout/toolbar" /> 
      <FrameLayout 
       android:id="@+id/bodyFrame" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_centerInParent="true"/> 

      <android.support.design.widget.FloatingActionButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="bottom|right" 
       android:layout_margin="16dp" 
       android:src="@drawable/bullseye" 
       local:layout_anchor="@id/bodyFrame" 
       local:layout_anchorGravity="bottom|right|end" /> 

     </android.support.design.widget.CoordinatorLayout> 

     <!-- Left Side --> 
     <FrameLayout 
     android:id="@+id/navigationFrame" 
     android:layout_height="match_parent" 
     android:layout_width="240dp" 
     android:layout_gravity="left|start" 
     android:clickable="true" /> 

</android.support.v4.widget.DrawerLayout> 

メインページレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.NavigationView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/navigation_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeToolbarNavigationView" 
    android:background="@color/colorPrimary" 
    local:itemTextColor="@color/light_gray" 
    local:itemIconTint="@color/light_gray" 
    local:headerLayout="@layout/navigation_header" 
    local:menu="@menu/navigation_drawer" /> 

メインのViewModel

public void ShowDefaultMenuItem() 
{ 
    NavigationService.Navigate<VacationRequestListViewModel>(); 
    NavigationService.Navigate<MenuViewModel>(); 
} 

私は小さな細部を失っているようだ...どんな助けもありがたい。

答えて

1

まず、アクティビティに対する属性のネームスペースに問題がありました。それらはMvvmCross.Droid.Views.Fragmentsである必要があります。また、MvxFragmentAttributeの代わりにMvxFragmentPresentationAttributeを使用する必要があります。その後、それは動作します。

+0

あなたはそれを解決できました。 StarWarsSampleをv5.4.2にアップグレードしました。 – nmilcoff

関連する問題