QQ 主介面底部三個標籤(訊息、聯絡人、動態)對應三個頁面切換,標準實作為 FragmentTabHost 搭配 Fragment,而非早期的 TabHost + Activity 或 ViewPager + RadioGroup 自製方案。
// 主 Activity 繼承 FragmentActivity
public class MainActivity extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabHost = findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
// 新增三個標籤
mTabHost.addTab(
mTabHost.newTabSpec("tab1").setIndicator("訊息", getResources().getDrawable(R.drawable.ic_msg)),
MsgFragment.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab2").setIndicator("聯絡人", getResources().getDrawable(R.drawable.ic_contact)),
ContactFragment.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab3").setIndicator("動態", getResources().getDrawable(R.drawable.ic_dynamic)),
DynamicFragment.class, null);
}
}
FragmentTabHost 內建處理標籤狀態保存/恢復,避免重疊、重建問題。Fragment 獨立生命週期,支援巢狀 Fragment、資料保持。setIndicator(View) 實現。