首页 > 解决方案 > Xamarin + MvvmCross 6.0 无法实现标签导航

问题描述

我正在使用 MvvmCross 构建一个简单的 Xamarin 应用程序,但目前无法实现选项卡导航。我收到 Mvx 异常:未找到 viewpager 或 tablayout

这是我的主要活动:

[MvxActivityPresentation]
[Activity(Theme = "@style/MainTheme",ConfigurationChanges=Android.Content.PM.ConfigChanges.Orientation | 
Android.Content.PM.ConfigChanges.ScreenSize)]
public class TabsRootView : MvxAppCompatActivity<TabsRootViewModel>
{
   protected override void OnCreate(Bundle bundle)
   {
       base.OnCreate(bundle);
       SetContentView(Resource.Layout.tabs_root_view);

       if (bundle == null)
       {
           ViewModel.ShowInitialViewModelsCommand.Execute();
       }
   }
}

这是我的标签根视图布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.design.widget.AppBarLayout android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <android.support.v7.widget.Toolbar 
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            local:layout_scrollFlags="scroll|enterAlways">
        </android.support.v7.widget.Toolbar>
        <android.support.design.widget.TabLayout 
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="16dp"
            local:tabGravity="center"
            local:tabMode="scrollable" />
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        local:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

这应该是我的标签内容片段之一(另一个看起来几乎相同):

[MvxTabLayoutPresentation(TabLayoutResourceId = Resource.Id.tabs, ViewPagerResourceId = Resource.Id.viewpager, Title = "Bacheca", ActivityHostViewModelType = typeof(TabsRootViewModel))]
[Register(nameof(PostsView))]
public class PostsView : MvxFragment<PostsViewModel>
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView(inflater, container, savedInstanceState);

        var view = this.BindingInflate(Resource.Layout.posts_view, null);

        // RecyclerView
        var recyclerView = view.FindViewById<MvxRecyclerView>(Resource.Id.recycler_view);
        recyclerView.SetLayoutManager(new LinearLayoutManager(Activity));
        recyclerView.HasFixedSize = false;

        // Swipe touch helper
        var callback = new SwipeItemTouchHelperCallback(ViewModel);
        var touchHelper = new ItemTouchHelper(callback);
        touchHelper.AttachToRecyclerView(recyclerView);

        return view;
    }
}

标签: xamarinxamarin.androidmvvmcross

解决方案


推荐阅读