我有这个布局:
1)带有ToolBar和片段容器的AppCompatActivity
2)一些简单的碎片
3)使用ViewPager
隐藏TabLayout的片段当我使用应该在选项卡上使用的片段时,片段显示得非常好。
应该在选项卡上的一个片段位于ViewPager中。 这就是我尝试在Fragment中实现TabLayout的方法
带有 TabLayout 的片段和 ViewPager:
public class StaffProfileFragment : Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
// return inflater.Inflate(Resource.Layout.YourFragment, container, false);
var view = inflater.Inflate(Resource.Layout.StaffProfilesWithTabs, container, false);
var fragments = new Fragment[]
{
new StaffList(),
new MessagesFragment(),
new SuggestionsMessagesFragment()
};
var titles = CharSequence.ArrayFromStringArray(new[]
{
"Profile",
"Thanks",
"Suggestions"
});
var viewPager = view.FindViewById<ViewPager>(Resource.Id.ProfileViewpager);
viewPager.Adapter = new TabsFragmentPagerAdapter(ChildFragmentManager, fragments, titles);
//var myActivity = (MainActivity)this.Activity;
//myActivity.SetActionBarTitle("Select Your Location");
// Give the TabLayout the ViewPager
var tabLayout = view.FindViewById<TabLayout>(Resource.Id.SlidingTabsTabLayout);
tabLayout.SetupWithViewPager(viewPager);
return view;
}
}
}
我使用适配器:
public class TabsFragmentPagerAdapter : FragmentPagerAdapter
{
private readonly Fragment[] fragments;
private readonly ICharSequence[] titles;
public TabsFragmentPagerAdapter(FragmentManager fm, Fragment[] fragments, ICharSequence[] titles) : base(fm)
{
this.fragments = fragments;
this.titles = titles;
}
public override int Count
{
get
{
return fragments.Length;
}
}
public override Fragment GetItem(int position)
{
return fragments[position];
}
public override ICharSequence GetPageTitleFormatted(int position)
{
return titles[position];
}
}
(我现在只提供此代码,如果它足以解决问题,否则我会放入xmls和Fragments代码。)
问题是该片段出现但它没有正确加载数据,标签不能被打字,如果我点击某个地方的片段,应用程序崩溃并在调试器中粉碎。
我做错了什么?在片段中实现tablayout是不错的主意吗?也许我应该在AppCompatActivity上实现它并显示/隐藏我想在每个场合使用的元素?
我测试的两个解决方案是:
但我试图了解哪种方法最好, 感谢