1 package com.example.fragmenttabdemo;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import android.annotation.SuppressLint;
7 import android.os.Bundle;
8 import android.support.v4.app.Fragment;
9 import android.support.v4.app.FragmentActivity;
10 import android.support.v4.app.FragmentManager;
11 import android.support.v4.app.FragmentPagerAdapter;
12 import android.support.v4.app.FragmentTabHost;
13 import android.support.v4.view.ViewPager;
14 import android.support.v4.view.ViewPager.OnPageChangeListener;
15 import android.view.LayoutInflater;
16 import android.view.View;
17 import android.view.ViewGroup;
18 import android.widget.ImageView;
19 import android.widget.TabHost.OnTabChangeListener;
20 import android.widget.TabHost.TabSpec;
21 import android.widget.TabWidget;
22 import android.widget.TextView;
23
24 @SuppressLint("InflateParams")
25 public class MainActivity extends FragmentActivity {
26 // 定义FragmentTabHost对象
27 private FragmentTabHost mTabHost;
28 // 定义一个布局
29 private LayoutInflater layoutInflater;
30 // 定义数组来存放Fragment界面
31 @SuppressWarnings("rawtypes")
32 private Class fragmentArray[] = { FragmentPage1.class, FragmentPage1.class,
33 FragmentPage1.class, FragmentPage1.class, FragmentPage1.class };
34 // 定义数组来存放按钮图片
35 private int mImageViewArray[] = { R.drawable.ic_launcher,
36 R.drawable.ic_launcher, R.drawable.ic_launcher,
37 R.drawable.ic_launcher, R.drawable.ic_launcher };
38 // Tab选项卡的文字
39 private String mTextviewArray[] = { "首页", "消息", "好友", "广场", "更多" };
40 private ViewPager vp;
41 private List<Fragment> list = new ArrayList<Fragment>();
42
43 public void onCreate(Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState);
45 setContentView(R.layout.activity_main);
46 initView();
47 initPager();
48 }
49
50 /**
51 * 初始化组件
52 */
53 private void initView() {
54 vp = (ViewPager) findViewById(R.id.pager);
55 vp.setOnPageChangeListener(new ViewPagerListener());
56 // MyAdapter adapter = new MyAdapter();
57 // vp.setAdapter(adapter);
58 // 实例化布局对象
59 layoutInflater = LayoutInflater.from(this);
60 // 实例化TabHost对象,得到TabHost
61 mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
62 // 得到对象后,初始化
63 // mTabHost.getTabWidget().setDividerDrawable(android.R.color.transparent);
64 mTabHost.setup(this, getSupportFragmentManager(), R.id.pager);
65 mTabHost.setOnTabChangedListener(new TabHostListener());
66 // 得到fragment的个数
67 int count = fragmentArray.length;
68
69 for (int i = 0; i < count; i++) {
70 // 为每一个Tab按钮设置图标、文字和内容
71 TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i])
72 .setIndicator(getTabItemView(i));
73 // 将Tab按钮添加进Tab选项卡中
74 mTabHost.addTab(tabSpec, fragmentArray[i], null);
75 mTabHost.setTag(i);
76 mTabHost.getTabWidget().setDividerDrawable(
77 android.R.color.transparent);
78 // 设置Tab按钮的背景
79 // mTabHost.getTabWidget().getChildAt(i)
80 // .setBackgroundResource(R.drawable.selector_tab_background);
81 }
82 }
83
84 //初始化viewpager
85 private void initPager() {
86 FragmentPage1 p1 = new FragmentPage1();
87 FragmentPage1 p2 = new FragmentPage1();
88 FragmentPage1 p3 = new FragmentPage1();
89 FragmentPage1 p4 = new FragmentPage1();
90 FragmentPage1 p5 = new FragmentPage1();
91 list.add(p1);
92 list.add(p2);
93 list.add(p3);
94 list.add(p4);
95 list.add(p5);
96 vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
97 }
98
99 /**
100 * 给Tab按钮设置图标和文字
101 */
102 private View getTabItemView(int index) {
103 View view = layoutInflater.inflate(R.layout.btn_bottom, null);
104 ImageView imageView = (ImageView) view.findViewById(R.id.imageview);
105 imageView.setImageResource(mImageViewArray[index]);
106 TextView textView = (TextView) view.findViewById(R.id.textview);
107 textView.setText(mTextviewArray[index]);
108 return view;
109 }
110
111 private class TabHostListener implements OnTabChangeListener {
112 @Override
113 public void onTabChanged(String tabId) {
114 int position = mTabHost.getCurrentTab();
115 vp.setCurrentItem(position);
116 }
117 }
118
119 class MyAdapter extends FragmentPagerAdapter {
120
121 public MyAdapter(FragmentManager fm) {
122 super(fm);
123 // TODO Auto-generated constructor stub
124 }
125
126 @Override
127 public Fragment getItem(int arg0) {
128 return list.get(arg0);
129 }
130
131 @Override
132 public int getCount() {
133 return list.size();
134 }
135
136 }
137
138 class ViewPagerListener implements OnPageChangeListener {
139
140 public void onPageScrollStateChanged(int arg0) {
141
142 }
143
144 public void onPageScrolled(int arg0, float arg1, int arg2) {
145
146 }
147
148 public void onPageSelected(int index) {
149 TabWidget widget = mTabHost.getTabWidget();
150 int oldFocusability = widget.getDescendantFocusability();
151 widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
152 mTabHost.setCurrentTab(index);
153 widget.setDescendantFocusability(oldFocusability);
154 }
155 }
156 }