为了得到这个工作,你将不得不在你的代码中做一些改变。
首先,必须将ViewPager从Activity(MainActivity)移到Fragment,称之为RootTabFragment或任何你喜欢的东西。
在您的MainActivity,您将创建这个RootTabFragment的一个实例:
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
var rootFragment = new RootTabFragment();
SupportFragmentManager
.BeginTransaction()
.Add (Resource.Id.containerLayout, rootFragment)
.Commit();
}
Resource.Id.containerLayout
只是在我main.xml中布局的FrameLayout
<FrameLayout
android:layout_width="match_parent"
android:id="@+id/containerLayout"
android:layout_height="match_parent" />
以前作为表明了自己的ViewPager需要移动到片段。在这里,您将执行所有Tab选项逻辑,就像您之前在MainActivity中执行的那样。
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate (Resource.Layout.RootTabFragment, container, false);
var pager = view.FindViewById<ViewPager> (Resource.Id.viewPager);
var tabLayout = view.FindViewById<TabLayout> (Resource.Id.tabs);
var adapter = new PagerAdapter (ChildFragmentManager);
adapter.AddFragment (new customFragment1(), "Fragment A");
adapter.AddFragment (new customFragment2(), "Fragment B");
pager.Adapter = adapter;
tabLayout.SetupWithViewPager (pager);
return view;
}
有一个小的变化,如果你注意到它,我们是不是要去使用SupportFragmentManager
相反,我们将使用ChildFragmentManager
。您无需对Adapter类进行任何更改,因为这两个类都源自FragmentManager
。
注意:我在这个例子中使用了TabLayout,但是如果你不需要的话,你可以很好地移除那部分代码。
在customFragment2类
现在
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
root = inflater.Inflate(Resource.Layout.CustomFragment2, container, false);
var adapter = new ListViewAdapter(this.Context, myList);
listView = root.FindViewById<ListView>(Resource.Id.listView);
listView.Adapter = adapter;
listView.ItemClick += showDetail;
return root;
}
void showDetail(object sender, AdapterView.ItemClickEventArgs e)
{
Activity
.SupportFragmentManager
.BeginTransaction()
.Replace (Resource.Id.containerLayout, new FragmentYouWantToNavigateTo())
.AddToBackStack(null)
.Commit();
}
这将取代你想在ListView的项目之一,当点击,以显示你的Resource.Id.containerLayout
这与你的FragmentYouWantToNavigateTo
您的MainActivity布局,是片段的全部内容。
希望这会有所帮助!
感谢您的详细答案!我实际上不能使用ChildFragmentManager,因为在我的适配器中我使用Android.support.v4.App。所以有转换问题。也许我必须改变我的适配器中的一些代码?编辑:我只需要在片段中使用Android v4 ... sry那 – Korken55
在这个例子中我也使用了Android.Support.V4.App。只要确保你的Adapter构造函数将'FragmentManager'作为一个参数,而不是'SupportFragmentManager',这样你就可以使用ChildFragmentManager。 – apineda
感谢,迄今为止,这项工程,但如果我点击一个项目,选项卡消失+如果我按硬件后退按钮我的应用程序崩溃。任何想法为什么发生这种情况 – Korken55