[英]Xamarin - Android Tablayout in each item of Recycler view
我正在嘗試創建一個 Recycler 視圖,其每個項目都將包含一個帶有 View pager 的 Tab 布局。 我現在面臨的問題是只有第一個項目包含 Tab 布局,其余項目是空的。 這就是我正在嘗試創建的
下面是布局、服務和適配器的代碼。
表格布局.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>
在 Recycler 視圖中 Tablayout 將作為 mvxItemTemplate 傳遞
回收器視圖.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"
/>
此服務將調用回收器視圖的每個項目並初始化視圖分頁器和 Tablayout
表格布局服務.cs
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);
}
}
這個 Adpater 將附加 3 個帶有 tabtiles 的片段
TabViewPagerAdapter.cs
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;
}
}
我認為問題來自這樣一個事實,即使 ShowReadOutExpandedSection() 為每個單元格調用,在其中您通過調用您的活動的 findById 方法靜態引用 recyclerView 和 TableLayout 的同一實例。
要實現您想要的功能,您必須編寫自己的 Recycler Adapter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.