package com.example.drawernavigation.fragment;import java.lang.reflect.Method;import com.example.drawernavigation.R;import android.app.Activity;import android.os.Build;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTabHost;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.ActionBar;import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar.Tab;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * 第一个抽屉中有几个tab 选择在此fragment中新建tabs而不是在外面 *  * @author qingxiangzhang *  */public class AFragmentDrawer extends Fragment {private static final String TAG = "AFragmentDrawer";static int contentViewCompat;private ActionBar actionBar;private FragmentTabHost mTabHost;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Log.e(TAG, "onCreateView");//View view = inflater.inflate(R.layout.fragment_a, container, false);////contentViewCompat = getContentViewCompat();////actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);return mTabHost;}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);Log.e(TAG, "onAttach");ActionBarActivity activity2 = (ActionBarActivity) activity;actionBar = activity2.getSupportActionBar();//mTabHost = new FragmentTabHost(activity2);//mTabHost.setup(getActivity(),getChildFragmentManager(),R.id.content_frame);////mTabHost.addTab(mTabHost.newTabSpec("task").setIndicator("任务"),TaskFragmentTab.class,null);//mTabHost.addTab(mTabHost.newTabSpec("tour").setIndicator("巡视"),TourFragmentTab.class,null);//mTabHost.addTab(mTabHost.newTabSpec("event").setIndicator("事件"),EventGeneralFragmentTab.class,null);//mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("通讯录"),ContactsFragmentTab.class,null);actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);actionBar.removeAllTabs();/** * 增加第一个tab ---task */Tab tab = actionBar.newTab().setText(R.string.fragment_task).setTabListener(new TabListener(activity, "task",TaskFragmentTab.class));actionBar.addTab(tab);/** * 增加第二个tab ---tour */tab = actionBar.newTab().setText(R.string.fragment_tour).setTabListener(new TabListener(activity, "tour",TourFragmentTab.class));actionBar.addTab(tab);/** * 增加第三个tab ---event */tab = actionBar.newTab().setText(R.string.fragment_event).setTabListener(new TabListener(activity,"event", EventGeneralFragmentTab.class));actionBar.addTab(tab);/** * 增加第四个tab ---contact */tab = actionBar.newTab().setText(R.string.fragment_contact).setTabListener(new TabListener(activity,"contact", ContactsFragmentTab.class));actionBar.addTab(tab);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.e(TAG, "onCreate");}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);Log.e(TAG, "onActivityCreated");}@Overridepublic void onStart() {super.onStart();Log.e(TAG, "onStart");}@Overridepublic void onResume() {Log.e(TAG, "onResume");super.onResume();}@Overridepublic void onPause() {Log.e(TAG, "onPause");super.onPause();}@Overridepublic void onStop() {Log.e(TAG, "onStop");super.onStop();}@Overridepublic void onDestroyView() {Log.e(TAG, "onDestroyView");super.onDestroyView();//actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);//mTabHost.removeAllViews();((ViewGroup) mTabHost.getParent()).removeView(mTabHost);}@Overridepublic void onDestroy() {Log.e(TAG, "onDestroy");super.onDestroy();}@Overridepublic void onDetach() {Log.e(TAG, "onDetach");super.onDetach();}/** * tab 监听器,处理 fragment之间的 attach, detach, show, hide,add, remove *  * @author qingxiangzhang *  * @param  */public static class TabListener implementsActionBar.TabListener {private Fragment mFragment;private final Activity mActivity;private final String mTag;private final Class mClass;/** * Constructor used each time a new tab is created. *  * @param activity *            The host Activity, used to instantiate the fragment * @param tag *            The identifier tag for the fragment * @param clz *            The fragment's Class, used to instantiate the fragment */public TabListener(Activity activity, String tag, Class clz) {mActivity = activity;mTag = tag;mClass = clz;Log.e(TAG, mClass.getName() + "TabListener");}/* The following are each of the ActionBar.TabListener callbacks */@Overridepublic void onTabReselected(Tab tab, FragmentTransaction ft) {Log.e(TAG, mFragment.getTag() + "onTabReselected");}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) {// 检测是否fragment已经被初始化if (mFragment == null) {// 如果没有,初始化并且将这个fragment增加到activitymFragment = Fragment.instantiate(mActivity, mClass.getName());ft.add(contentViewCompat, mFragment, mTag); // 注 此处存在一个BUG,具体见有道// 文档} else {// 如果存在,只要简单的attach它用于将其显示出来// ft.attach(mFragment);ft.show(mFragment);Log.e(TAG, "展示了 " + mTag + " fragment");}Log.e(TAG, mFragment.getTag() + " onTabSelected");}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {if (mFragment != null) {// detach 这个fragment,因为其他的fragment正在被attach// ft.detach(mFragment);ft.hide(mFragment);// ft.remove(mFragment);Log.e(TAG, mFragment.getTag() + " onTabUnselected");}/** * 因为源码中存在bug, 此方法中的ft并没有执行 需要加入下列代码 */if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {try {Method commit = tab.getClass().getDeclaredMethod("commitActiveTransaction");commit.setAccessible(true);commit.invoke(tab);} catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);}}}}public int getContentViewCompat() {return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? android.R.id.content: R.id.action_bar_activity_content;}}

更多相关文章

  1. Android(安卓)listview使用
  2. [置顶] Android基础--ConnectivityManager检查网络连接
  3. 12.8 SeekBar和RatingBar
  4. Android栗子の图片验证码生成
  5. Android---fragment动态切换简单使用
  6. 网络实时监测广播类
  7. Android(安卓)SQLite数据库操作代码类分享
  8. android动态使用FrameLayout(简单使用)
  9. 发送短信之分割短信 SMSManager

随机推荐

  1. android学习之LinearLayout
  2. Android局部布局替换实现
  3. android粗略获得程序运行时间的方法
  4. Android版本与Linux内核的关系
  5. 让Activity变成一个窗口
  6. Android消息机制Message消息池
  7. Android学习资源
  8. Android(安卓)源码分析 —— 从 Toast 出
  9. Android自动打包、签名、优化、上传ANT脚
  10. traceview进行Android性能测试