我正在创建一个在主屏幕上有三个选项卡的应用程序。我将每个选项卡的内容设置为单独的"活动"。我使用活动而不是Fragments的原因是,在其中一个选项卡中,我需要能够拥有Fragments,而嵌套的Fragments不受支持。
起初,我正在扩展TabActivity来实现这一点,但后来我意识到它已被弃用,所以我开始四处寻找。我发现有人建议在这里使用ActivityGroup,但是。。。这也遭到了反对。
StackExchange上针对我遇到的问题的所有解决方案似乎都包含不推荐使用的功能。例如,Android:没有TabActivity的TabHost,以及在活动类中工作的Android-TabHost
在不使用不推荐使用的功能的情况下,使用TabHost并允许选项卡包含片段的正确方法是什么?
以下是我目前拥有的
import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class HomeTabs extends ActivityGroup {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost host = (TabHost)findViewById(android.R.id.tabhost);
LocalActivityManager mlam = new LocalActivityManager(this, false);
mlam.dispatchCreate(savedInstanceState);
host.setup(mlam);
TabSpec spec = host.newTabSpec("Home");
spec.setContent(new Intent(this, HomeActivity.class));
spec.setIndicator("Home");
host.addTab(spec);
spec = host.newTabSpec("Browse");
spec.setContent(new Intent(this, BrowseActivity.class));
spec.setIndicator("Browse");
host.addTab(spec);
spec = host.newTabSpec("About");
spec.setContent(new Intent(this, AboutActivity.class));
spec.setIndicator("About");
host.addTab(spec);
}
}
在不使用不推荐使用的功能的情况下,使用TabHost并允许选项卡包含片段的正确方法是什么?
在选项卡中放置视图,无论是在布局中静态地作为FrameLayout
在TabHost
内的直接子级,还是通过采用TabContentFactory
的setContent()
变体动态地放置视图。AFAIK,这些视图可以获取管理片段(例如,ViewPager
)的东西,或者可能通过<fragment>
元素直接获取片段本身。
或者,不要使用TabHost
。使用操作栏中的选项卡,使用ActionBarSherlock实现向后兼容性。或者,使用ViewPager
。或者,使用ViewFlipper
和TabWidget
(尽管有文档,但它们似乎对TabHost
没有实际依赖关系)。或者,使用ViewFlipper
和其他一些控制机制在"选项卡"之间切换。
或者,去掉"选项卡内容中的片段"。