android4.4 Fragment +ViewPager+actionbar 使用
在app开发中,我们可能会想要这样一个activiy——上面是actionbar,下面是fragment。这样实现的界面往往是要点击actionbar的对应item才能跳到对应的fragment中,但是不能滑动切换,甚是不便。那如何实现滑动切换,这就是这里要讲到的 ,Fragment +ViewPager+actionbar 使用。下面是我在某个界面开发中,实现这个功能的具体步骤:
1. 首先要特别要注意几个包的引人,否则已一直报错(当时一直报错时,我甚至差点放弃了这个做法),
正确的组合使用如下:
- import android.support.v13.app.FragmentPagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
2. 建一个viewpager,xml文件代码如下:
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <android.support.v4.view.ViewPager
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </FrameLayout>
3. 在activity的oncreate方法中获取viewPager,并且增加Adapter,PageChangeListener:
- ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
- viewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));
- viewPager.setOnPageChangeListener(mPageChangeListener);
- mViewPager = viewPager;</span>
4. 实现ViewPagerAdapter
- public class ViewPagerAdapter extends FragmentPagerAdapter {
- public ViewPagerAdapter(FragmentManager fm) {
- super(fm);
- }
- @Override
- public Fragment getItem(int position) {
- switch (position) {
- case 0:
- return mNetWorkFragment;//这是滑到第几就显示对应的Fragment
- case 1:
- return mDeviceFragment;
- case 2:
- return mPersonFragment;
- case 3:
- return mMoreFragment;
- }
- return null;
- }
- @Override
- public int getCount() {
- return 4; //这是 Fragment的数量
- }
- }
5. OnPageChangeListener 的实现
- private OnPageChangeListener mPageChangeListener = new OnPageChangeListener() {
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
- @Override
- public void onPageSelected(int position) {
- mActionBar.setSelectedNavigationItem(position);//这是当viewpager滑到不同的fragment时,actionbar要显示对应的tab
- }
6. actionbar的实例话:
- mActionBar = getActionBar();
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- final Tab tab = mActionBar.newTab();
- LayoutInflater inflater = getLayoutInflater();
- View view = inflater.inflate(R.layout.setting_tab_new_ui, null);//setting_tab_new_ui 自定义的tab样式上面是图,下面是字
- ImageView dialView = (ImageView) view.findViewById(R.id.tab_icon);
- if (dialView != null) {
- dialView.setImageResource(R.drawable.tab_network);
- }
- TextView dialText = (TextView) view.findViewById(R.id.tab_text);
- </span>if (dialText != null) {
- dialText.setText(R.string.status_operator);
- }
- tab.setCustomView(view);
- tab.setTabListener(mTabListener);
- mActionBar.addTab(tab);</span>
7. setting_tab_new_ui 如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="120dip"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ImageView android:id="@+id/tab_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:scaleType="centerInside"
- android:focusable="true"
- />
- <TextView
- android:id="@+id/tab_text"
- android:layout_width="48dip"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:textSize="9sp"
- android:textColor="@color/tab_text_color_normal_newui"
- android:singleLine="true"
- android:ellipsize="end"
- android:scrollHorizontally="true"
- />
- </LinearLayout>
8. actionbar的监听,TabListener 实现
- private final TabListener mTabListener = new TabListener() {
- @Override
- public void onTabUnselected(Tab tab, FragmentTransaction ft) {
- }
- @Override
- public void onTabSelected(Tab tab, FragmentTransaction ft) {
- mCurrentTabIndex = tab.getPosition();
- mViewPager.setCurrentItem(mCurrentTabIndex);//获取被选中的TabIndex,ViewPager显示对应的Fragment
- }
- @Override
- public void onTabReselected(Tab tab, FragmentTransaction ft) {
- }
- };
- public void setCurrentTab(int position) { //设置当时的 SelectedNavigationItem
- mCurrentTabIndex = position;
- if ((mActionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS)
- && (mCurrentTabIndex != mActionBar.getSelectedNavigationIndex())) {
- mActionBar.setSelectedNavigationItem(mCurrentTabIndex);
- }

浙公网安备 33010602011771号