ViewPager+Fragment的使用

ViewPager配合Fragment的使用

一、ViewPager和View的组合使用

标题

(一)、给ViewPager设置标题

1、在Layout布局中加入ViewPager:

.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         /> 

2.在Activity中初始化ViewPager

ViewPager mPager=(ViewPager) findViewById(R.id.viewPager);

3.在Layout文件下创建ViewPager中所使用的内容View.xml文件

4.将Layout文件夹下的所有View文件全部转换为对象并添加到集合中

/**
     * 获取所有的页卡
     * @return
     */
    private List getData() {
        Listlist=new ArrayList();
//      加载所有的View内容
        View view1=View.inflate(this, R.layout.view1, null);
        View view2=View.inflate(this, R.layout.view2, null);
        View view3=View.inflate(this, R.layout.view3, null);
        View view4=View.inflate(this, R.layout.view4, null);

//      将所有的内容页View添加到集合中
        list.add(view1);
        list.add(view2);
        list.add(view3);
        list.add(view4);
        return list;
    }

5、创建一个类继承PagerAdatper

public class MyPagerAdapter extends PagerAdapter {}

6、重写PagerAdapter里面的方法

package com.pgw.viewpagerdemo;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

public class MyPagerAdapter extends PagerAdapter {
    private List viewList;
    private List titleData;
    public MyPagerAdapter(List viewList, List tatileData) {
        this.viewList = viewList;
        this.titleData=tatileData;
    }
    // 获取页面的个数
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return viewList.size();
    }
    // view和对象是否相等
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
    // 实例化页面时调用
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(viewList.get(position));
        return viewList.get(position);
    }
    // 销毁页面时调用
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(viewList.get(position));
    }   

}

7、在Activity中实例化MyPagerAdapter

//创建ViewPager适配器
  MyPagerAdapter adapter=new myPagerAdapter(viewList,tatileData);

8、将创建好的适配器设置给VeiwPager

//      给ViewPager设置适配器
        mPager.setAdapter(adapter);

(二)、给ViewPager设置标题

1、在ViewPager的Layout中加入PagerTabStrip

.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         >
        .support.v4.view.PagerTabStrip
            android:id="@+id/tab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_gravity="top"
            >
        .support.v4.view.PagerTabStrip>
    .support.v4.view.ViewPager>

2、在Activity中实例化PagerTabStrip并设置参数

//      初始化PagerTabStrip
        mTitile=(PagerTabStrip)findViewById(R.id.tab);
//      设置背景色
        mTitile.setBackgroundColor(Color.GRAY);
//      设置字体颜色
        mTitile.setTextColor(Color.RED);
//      设置是否绘制下划线
        mTitile.setDrawFullUnderline(false);
//      设置指示器颜色
        mTitile.setTabIndicatorColor(0xff999999);

3、初始化所有的标题数据

    List<String> list=new ArrayList<String>();
        list.add("第一页");
        list.add("第二页");
        list.add("第三页");
        list.add("第四页");

4、将集合传入MyPagerAdapter中,并重写getPageTatitle方法

//  设置标题
    @Override
    public CharSequence getPageTitle(int position) {
        return titleData.get(position);
    }

二、ViewPager和Fragment的组合使用

1、创建所有的Fragment

2、初始化所有的Fragment

/**
     * 初始化所有的Fragment
     * @return
     */
    private List initFragmen() {
        List list=new ArrayList();
        list.add(new Fragment1());
        list.add(new Fragment2());
        list.add(new Fragment3());
        list.add(new Fragment4());      
        return list;
    }

3、创建一个类集成FragmentPagerAdatper

package com.pgw.viewpagerdemo;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.View;
import android.view.ViewGroup;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    private List tatileList;
    private List fragmentList;

    public MyFragmentPagerAdapter(FragmentManager fm, List fragmentList, List tatileList) {
        super(fm);
        this.fragmentList=fragmentList;
        this.tatileList=tatileList;
    }
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }
    @Override
    public int getCount() {
        return fragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return tatileList.get(position);
    }   
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        return super.instantiateItem(container, position);
    }   
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        super.destroyItem(container, position, object);
    }
}

4、将MyFragmentPagerAdapter设置给ViewPager

//      创建FragmentPagerAdatper
    MyFragmentPagerAdapter adapter=new myFragmentPagerAdapter(getSupportFragmentManager(),fragmentList,tatileList);
//      5.给ViewPager设置适配器
        mPager.setAdapter(adapter);

5、给ViewPager添加事件

//注册事件
mPager.setOnPageChangeListener(this);


    @Override
    public void onPageScrollStateChanged(int arg0) {

    }
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }
//  现在选择的页面
    @Override
    public void onPageSelected(int position) {
        // TODO Auto-generated method stub
//      因为他的Position是从0开始
        position++;
        Toast.makeText(MainActivity.this, "当前是第"+position+"页", Toast.LENGTH_SHORT).show();

    }

注意:

1、destroyItem方法中不能调用父类的destroyItem方法。 2、如果在MyFragmentPagerAdapter 中不重写instantiateItem和destroyItem,那么ViewPager就不会销毁Fragment

以上项目地址:VewPagerDemo地址

你可能感兴趣的:(ViewPager+Fragment的使用)