zoukankan      html  css  js  c++  java
  • Android3.0 以前的Fragment支持

          Fragment非常实用,Android也为3.0以前的平台增加了Fragment支持,只是该Fragment不是继承android.app.Fragment,而是继承android.support.v4.app.Fragment。

          除此之外,Android还为该android.v4.app.Fragment提供了如下配套类。

    • FragmentActivity:在早期版本上使用Fragment必须借助于FragmenActivity的支持,只有该支持类提供的getSupportFragmentManager()方法才能获取FragmentManager管理器。
    • ViewPager:它是Fragment容器,可以同时管理多个Fragment,并允许多个Fragment切换时提供动画效果。
    • FragmentPagerAdapter:Adpter类,用于为ViewPager提供多个Fragment。通常用于被扩展。

          提示:FragmentPagerAdapter的作用有点类似于前面介绍的Adpter,只是Adapter用于为AdapterView提供多个列表项;而FragmentPagerAdapter则专门为ViewPager提供多个Fragment。

    • PagerTitleStrip:与ViewPager结合使用,用于在ViewPager上显示“导航条”。

         该实例的界面布局文件将会使用ViewPager容器,该容器可以盛装多个Fragment,并为多个Fragment切换时提供动画支持。该实例的界面布局文件如下。

         

    <android.support.v4.view.ViewPager 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- 定义导航状态条组件 -->
        <android.support.v4.view.PagerTitleStrip
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:textColor="#fff"
            android:paddingTop="4dp"
            android:paddingBottom="4dp"/>
    </android.support.v4.view.ViewPager>

          上面的布局文件中定义了一个ViewPager组件,并为该ViewPager组件定义了配套的PagerTitleStrip组件——它是一个导航状态条组件。

          接下来Activity中还是需要按上面介绍的两个步骤来启用ActionBar的Tab导航支持。除此之外,为了让ViewPager组件能正常工作,Activity需要为该ViewPager组件创建并设置FragmentPagerAdpter。

          下面是该Activity的代码。

         

    package org.crazyit.helloworld;
    
    import android.os.Bundle;
    import android.app.ActionBar;
    import android.app.ActionBar.Tab;
    import android.app.ActionBar.TabListener;
    import android.app.Activity;
    import android.app.FragmentTransaction;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.Menu;
    
    public class ActionBar_TabSwipeNav extends FragmentActivity implements TabListener {
    
        ViewPager viewPager;
        ActionBar actionBar;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.action_bar__tab_swipe_nav);
            //获取ActionBar对象
            actionBar=getActionBar();
            //获取ViewPager
            viewPager=(ViewPager)findViewById(R.id.pager);
            //创建一个FragmentPagerAdapter对象,该对象负责为ViewPager提供多个Fragment
            FragmentPagerAdapter pagerAdapter=new FragmentPagerAdapter(getSupportFragmentManager())
            {
                //获取第position位置的Fragment
                @Override
                public Fragment getItem(int position) {
                    Fragment fragment=new DummyFragmentOther();
                    Bundle args=new Bundle();
                    args.putInt(DummyFragment.ARG_SECTION_NUMBER, position+1);
                    fragment.setArguments(args);
                    // TODO Auto-generated method stub
                    return fragment;
                }
                //该方法的返回值i表明该Adapter总共包括多少个Fragmnet
                @Override
                public int getCount() {
                    // TODO Auto-generated method stub
                    return 3;
                }
                @Override
                public CharSequence getPageTitle(int position) {
                    switch(position)
                    {
                    case 0:
                        return "第一页";
                    case 1:
                        return "第二页";
                    case 2:
                        return "第三页";
                    }
                    // TODO Auto-generated method stub
                    //return super.getPageTitle(position);
                    return null;
                }
            };
            //设置ActionBar使用Tab导航方式
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            //遍历pagerAdapter对象所包含的全部Fragment
            //每个Fragment对应创建一个Tab标签
            for(int i=0;i<pagerAdapter.getCount();i++)
            {
                actionBar.addTab(actionBar.newTab().setText(pagerAdapter.getPageTitle(i)).setTabListener(this));
                
            }
            //为ViewPager组件设置FragmentPagerAdapter
            viewPager.setAdapter(pagerAdapter);////为ViewPager组件绑定事件监听器
            viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
                //当ViewPager显示的Fragmnet发生改变时激发该方法
                @Override
                public void onPageSelected(int position) {
                    // TODO Auto-generated method stub
                    //super.onPageSelected(position);
                    actionBar.setSelectedNavigationItem(position);
                }
                
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.action_bar__tab_swipe_nav, menu);
            return true;
        }
    
        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            viewPager.setCurrentItem(tab.getPosition());//
        }
    
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            
        }
    
    }

       上面的程序采用匿名内部类的形式创建了一个FragmentPagerAdapter对象。接下来程序在①号代码处为ViewPager组件设置了该FragmentPagerAdpter对象,这样即可让该ViewPager正常工作。

        为了启用ActionBar的Tab导航支持,上面的粗体字代码同样遵守前面介绍的两个步骤:先调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)启用Tab导航支持,再调用ActionBar的addTab()方法添加Tab标签,并为Tab标签绑定事件监听器。

        由于此处使用了ViewPager来管理多个Fragment,程序代码处理Fragment的切换时更简单:只要调用ViewPager的setCurrentItem()方法来显示指定Fragment即可。如上面程序中②号代码所示。

       运行上面的程序将会看到如下效果图:

         

           

  • 相关阅读:
    Ionic2开发环境搭建
    关于在浏览器中测试cordova plugin的注意事项。
    像azure一样桌面显示Windows系统信息
    吐槽下微软
    Hyper-v UBUNTU 12.04 模板设置
    MongoDB整库备份与还原以及单个collection备份、恢复方法
    nginx 配置
    vsftpd配置文件详解
    分享几个免费IP地址查询接口(API)
    黑客帝国效果
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3400866.html
Copyright © 2011-2022 走看看