FragmentTabHost+ViewPager实现底部按钮

  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 }

 

你可能感兴趣的:(viewpager)