Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin-每个回收器视图项中的Android Tablayout_Android_Xamarin_Xamarin.android_Mvvmcross - Fatal编程技术网

Xamarin-每个回收器视图项中的Android Tablayout

Xamarin-每个回收器视图项中的Android Tablayout,android,xamarin,xamarin.android,mvvmcross,Android,Xamarin,Xamarin.android,Mvvmcross,我正在尝试创建一个Recycler视图,它的每个项目都将包含一个带有view pager的选项卡布局。 我现在面临的问题是,只有第一项包含选项卡布局,其余项为空。 下面是布局、服务和适配器的代码 Tablayout.xml <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:fo

我正在尝试创建一个Recycler视图,它的每个项目都将包含一个带有view pager的选项卡布局。 我现在面临的问题是,只有第一项包含选项卡布局,其余项为空。

下面是布局、服务和适配器的代码

Tablayout.xml

<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:foregroundGravity="center"
        local:tabGravity="center"
        android:layout_gravity="center_vertical"
        android:paddingVertical = "22dp"
        local:tabPaddingBottom = "0dp"
        local:tabIndicatorFullWidth="true"
        local:tabIndicatorGravity="bottom"
        local:tabTextAppearance="@style/AppTabTextAppearance"
        local:tabMode="fixed"
        local:tabIndicatorHeight="2dp"
        style="@style/CustomTabLayout"
        android:layout_height="wrap_content">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
        android:background="@android:color/transparent"
        android:id="@+id/pager"
        android:layout_below = "@id/tabs"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</android.support.v4.view.ViewPager>

在回收器视图中,表格布局将作为mvxItemTemplate传递

RecyclerView.xml

  <MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView
     card_view:MvxItemTemplate="@layout/Tablayout
     card_view:MvxBind="ItemsSource Routes"

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/recycler_view"
    android:scrollbars="vertical"        
    />

我认为问题来自这样一个事实,即即使对每个单元格调用ShowReadOutExpandedSection(),在其中您也可以通过调用活动的findById方法静态引用相同的recyclerView和TableLayout实例


要实现您想要的,您必须编写自己的回收器适配器。

伙计,有些东西没有意义。类的名称是
TabViewPagerAdapter
,您指的是
TabViewPagerAdapter
,但在内容中您没有定义
TabViewPagerAdapter
,而是定义了
ExpandedTabViewPagerAdapter
。通过更改您的
TablayoutService.cs
来解决此问题,该行应显示
viewPager.Adapter=new ExpandedTabViewPagerAdapter(act.SupportFragmentManager)
public class TablayoutService
{ 
  public void ShowReadOutExpandedSection() 
    {
        var top = Mvx.IoCProvider.Resolve<IMvxAndroidCurrentTopActivity>();
        var act = top.Activity as MvxAppCompatActivity;
        ViewPager viewPager = act.FindViewById<ViewPager>(Resource.Id.pager);
        viewPager.Adapter = new TabViewPagerAdapter(act.SupportFragmentManager) ;
        var tabLayout = act.FindViewById<TabLayout>(Resource.Id.tabs);
        tabLayout.SetupWithViewPager(viewPager);
    }
 }
public class ExpandedTabViewPagerAdapter : MvxCachingFragmentPagerAdapter
{
    const int PAGE_COUNT = 3;
    // Tab Titles
    private string[] tabtitles = Android.App.Application.Context.Resources.GetStringArray(Resource.Array.Top_Tab_Elements);

    public ExpandedTabViewPagerAdapter(FragmentManager fm) : base(fm) { }
    public override int Count
    {
        get { return PAGE_COUNT; }
    }
    public override Java.Lang.ICharSequence GetPageTitleFormatted(int position)
    {
        return new Java.Lang.String(tabtitles[position]);
    }

    public override Fragment GetItem(int position, Fragment.SavedState fragmentSavedState = null)
    {
        switch (position)
        {
            case 0:
                ExpandedEstateFragment fragmenttab1 = (ExpandedEstateFragment)Activator.CreateInstance(typeof(ExpandedEstateFragment));
                var viewModelLoader = Mvx.IoCProvider;
                fragmenttab1.ViewModel = viewModelLoader.Resolve<IMvxViewModelLoader>().LoadViewModel(MvxViewModelRequest.GetDefaultRequest(typeof(ExpandedEstateViewModel)), null, null);
                return fragmenttab1;
            case 1:
                ExpandedEstateFragment fragmenttab2 = (ExpandedEstateFragment)Activator.CreateInstance(typeof(ExpandedEstateFragment));
                viewModelLoader = Mvx.IoCProvider;
                fragmenttab2.ViewModel = viewModelLoader.Resolve<IMvxViewModelLoader>().LoadViewModel(MvxViewModelRequest.GetDefaultRequest(typeof(ExpandedEstateViewModel)), null, null);
                return fragmenttab2;
            case 2:
                ExpandedEstateFragment fragmenttab3 = (ExpandedEstateFragment)Activator.CreateInstance(typeof(ExpandedEstateFragment));
                viewModelLoader = Mvx.IoCProvider;
                fragmenttab3.ViewModel = viewModelLoader.Resolve<IMvxViewModelLoader>().LoadViewModel(MvxViewModelRequest.GetDefaultRequest(typeof(ExpandedEstateViewModel)), null, null);
                return fragmenttab3;
        }
        return null;
    }