FragmentTabHost
在其通常的配置中足够有礼貌,可以为我们处理片段的实例化,这意味着我们只需要传入类中,然后完成其余的工作:
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"), FriendsFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), ContactsFragment.class, null);
正如您所看到的,我们只需要传递Fragment
类(例如FriendsFragment.class
)和要传递的args包(在本例中为null
)和{{ 1}}将为我们处理片段的初始化。它似乎也很懒散,只会在实际更改选项卡时加载片段。
在很多情况下这很棒,但我想要做的是手动预先创建我的片段,然后将它们附加到FragmentTabHost
。这样做的主要优点是我可以确保所有标签片段始终存在,而不是在用户更改标签时懒惰地创建。
理想情况下,我想拥有的是这样的东西(如果只有方法存在!):
FragmentTabHost
所以问题是:是否可以使用FriendsFragment f1 = new FriendsFragment();
ContactsFragment f2 = new ContactsFragment();
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"), f1);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), f2);
手动预创建片段,还是有必要完全采用不同的方法?