Android Tab导航菜单栏--FragmentTabHost+Fragment实现(基础篇)
16lz
2021-01-22
FragmentTabHost继承TabHost,增加了对Fragment的支持。
Fragment是从Android3.0才引入,Fragment有自己单独的生命周期,在Activity运行的时候可以很方便的使用。
这里只是介绍FragmentTabHost的用法。
1. 先看看谷歌官方文档上的两个例子:
import com.example.android.supportv4.R; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; /** * This demonstrates how you can implement switching between the tabs of a * TabHost through fragments, using FragmentTabHost. */ public class FragmentTabs extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_tabs); mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), FragmentStackSupport.CountingFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), LoaderCursorSupport.CursorLoaderListFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), LoaderCustomSupport.AppListFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); } }
import com.example.android.supportv4.R; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTabHost; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentTabsFragmentSupport extends Fragment { private FragmentTabHost mTabHost; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mTabHost = new FragmentTabHost(getActivity()); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.fragment1); mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), FragmentStackSupport.CountingFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), LoaderCursorSupport.CursorLoaderListFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), LoaderCustomSupport.AppListFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); return mTabHost; } @Override public void onDestroyView() { super.onDestroyView(); mTabHost = null; } }
第二个例子是在Fragment中使用,通过构造函数mTabHost = new FragmentTabHost(getActivity())和setup(Context, FragmentManager, int) 完成TabHost的初始化,再依次添加Tab。
注意:
getFragmentManager拿到的是activity对所包含fragment的Manager;
getChildFragmentManager()拿到fragment嵌套fragment的Manager;
引用android-support-v4的话,要使用 getSupportFragmentManager();
2. FragmentTabHost常见用法:
更多相关文章
- Java类的初始化顺序
- 关于一个简单的策略设计模式的例子
- javascript小例子--实现邮箱验证的功能
- ***100分,谁有用java mail做的把表单直接发送到邮箱的网页例子,发
- java死锁的例子
- JAVA-初步认识-第十章-对象的初始化过程
- Zookeeper官网文档—第三章 2.Zookeeper Java例子
- Java虚拟机:类的初始化
- JAVA异步加回调的例子