首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 嵌套 Fragment 中使用 FragmentTabHost + Fragment 的正確姿勢

     編輯:程式設計綜合問答

場景

Activity 已包含一層 Fragment,需在該 Fragment 內再使用 FragmentTabHost 承載多個子 Fragment。

關鍵點

  1. 使用子 FragmentManager:getChildFragmentManager() 而非 getFragmentManager() / getSupportFragmentManager()。
  2. XML 中聲明 FragmentTabHost 或動態創建並調用 setup(context, childFragmentManager, containerId)。
  3. 添加 Tab 時傳入 Fragment 類:tabHost.addTab(tabSpec, FragmentClass.class, args)。

代碼模板


public class ParentFragment extends Fragment {
    private FragmentTabHost tabHost;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_parent, container, false);
        tabHost = root.findViewById(android.R.id.tabhost);
        tabHost.setup(getActivity(), getChildFragmentManager(), R.id.tab_content);
        
        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab 1"), ChildFragment1.class, null);
        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Tab 2"), ChildFragment2.class, null);
        return root;
    }
    
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        tabHost = null; // 避免內存洩漏
    }
}

參考資料

最佳回答

drawerNavigation被fragment overlay, FragmentTabHost使用
FragmentTabHost+fragment中獲得fragment的對象
Android之Fragment的使用(一)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved