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;
@Override
public 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;
}
@Override
public 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<TaskFragmentTab>(activity, "task",
TaskFragmentTab.class));
actionBar.addTab(tab);
/**
* 增加第二个tab ---tour
*/
tab = actionBar
.newTab()
.setText(R.string.fragment_tour)
.setTabListener(
new TabListener<TourFragmentTab>(activity, "tour",
TourFragmentTab.class));
actionBar.addTab(tab);
/**
* 增加第三个tab ---event
*/
tab = actionBar
.newTab()
.setText(R.string.fragment_event)
.setTabListener(
new TabListener<EventGeneralFragmentTab>(activity,
"event", EventGeneralFragmentTab.class));
actionBar.addTab(tab);
/**
* 增加第四个tab ---contact
*/
tab = actionBar
.newTab()
.setText(R.string.fragment_contact)
.setTabListener(
new TabListener<ContactsFragmentTab>(activity,
"contact", ContactsFragmentTab.class));
actionBar.addTab(tab);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG, "onCreate");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.e(TAG, "onActivityCreated");
}
@Override
public void onStart() {
super.onStart();
Log.e(TAG, "onStart");
}
@Override
public void onResume() {
Log.e(TAG, "onResume");
super.onResume();
}
@Override
public void onPause() {
Log.e(TAG, "onPause");
super.onPause();
}
@Override
public void onStop() {
Log.e(TAG, "onStop");
super.onStop();
}
@Override
public void onDestroyView() {
Log.e(TAG, "onDestroyView");
super.onDestroyView();
// actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
// mTabHost.removeAllViews();
((ViewGroup) mTabHost.getParent()).removeView(mTabHost);
}
@Override
public void onDestroy() {
Log.e(TAG, "onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
Log.e(TAG, "onDetach");
super.onDetach();
}
/**
* tab 监听器,处理 fragment之间的 attach, detach, show, hide,add, remove
*
* @author qingxiangzhang
*
* @param <T>
*/
public static class TabListener<T extends Fragment> implements
ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> 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<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
Log.e(TAG, mClass.getName() + "TabListener");
}
/* The following are each of the ActionBar.TabListener callbacks */
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Log.e(TAG, mFragment.getTag() + "onTabReselected");
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// 检测是否fragment已经被初始化
if (mFragment == null) {
// 如果没有,初始化并且将这个fragment增加到activity
mFragment = 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");
}
@Override
public 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;
}
}
Fragment中添加tabs
最新推荐文章于 2021-05-27 14:29:46 发布