ViewPager使用方法

原创 2015年07月10日 18:46:23

ViewPager介绍

ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。

从这个描述中我们知道几点:

1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。
layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/tabstrip"
            android:layout_width="wrap_content"
            android:layout_height="50dip"
            android:gravity="center" />
    </android.support.v4.view.ViewPager>

</RelativeLayout>

View的加载

我们先写ViewPager的适配器:
MyPagerAdapter.java

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<View> viewList;

    public MyPagerAdapter(List<View> viewList){
        this.viewList = viewList;
    }

    /**
     * 返回页卡的数量
     */
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return viewList.size();
    }

    /**
     * 页卡是否来自于对象
     */
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;
    }

    /**
     * 实例化一个页卡
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        container.addView(viewList.get(position));
        return viewList.get(position);
//      return super.instantiateItem(container, position);
    }

    /**
     * 销毁一个页卡
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView(viewList.get(position));
//      super.destroyItem(container, position, object);
    }

    /**
     * 返回页面标题信息
     */
//  @Override
//  public CharSequence getPageTitle(int position) {
//      // TODO Auto-generated method stub
//      return viewTitle.get(position);
//  }
}

然后写主函数,这里省略了xml中的代码。
VPagerActivity.java

import java.util.ArrayList;
import java.util.List;

import com.hch.svpre.R;
import com.hch.svpre.adapter.MyPagerAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.View;

public class VPagerActivity extends Activity {
    private ViewPager viewPager;
    private List<View> listView;
    private MyPagerAdapter pagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_viewpager);
        initData();
        initView();
    }

    private void initData() {
        // TODO Auto-generated method stub
        listView = new ArrayList<View>();

        View view1 = View.inflate(this, R.layout.viewpager1, null);
        View view2 = View.inflate(this, R.layout.viewpager2, null);
        View view3 = View.inflate(this, R.layout.viewpager3, null);
        View view4 = View.inflate(this, R.layout.viewpager4, null);
        listView.add(view1);
        listView.add(view2);
        listView.add(view3);
        listView.add(view4);
    }

    private void initView() {
        // TODO Auto-generated method stub
        viewPager = (ViewPager) this.findViewById(R.id.vpView);

        pagerAdapter = new MyPagerAdapter(listView);
        viewPager.setAdapter(pagerAdapter);

//      滑动监听器
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }
}

与Fragment“合作”

简单点儿说,这里只需要把上面的View数组改为Fragment数组即可,但这里需要注意几个方面:

1)主函数继承FragmentActivity,而不是Activity。
2)Fragment要使用v4的包,也就是android.support.v4.app.Fragment。

下面为示例代码:
VPFragActivity.java

import java.util.ArrayList;
import java.util.List;

import com.hch.svpre.R;
import com.hch.svpre.activity.fragment.VPFragment1;
import com.hch.svpre.activity.fragment.VPFragment2;
import com.hch.svpre.activity.fragment.VPFragment3;
import com.hch.svpre.activity.fragment.VPFragment4;
import com.hch.svpre.adapter.MyFragmentPagerAdapter;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class VPFragActivity extends FragmentActivity{
    private ViewPager viewPager;
    private List<Fragment> listFragment;
    private MyFragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_viewpager);
        initData();
        initView();
    }

    private void initData() {
        // TODO Auto-generated method stub
        listFragment = new ArrayList<Fragment>();
        listFragment.add(new VPFragment1());
        listFragment.add(new VPFragment2());
        listFragment.add(new VPFragment3());
        listFragment.add(new VPFragment4());
    }

    private void initView() {
        // TODO Auto-generated method stub
        viewPager = (ViewPager) this.findViewById(R.id.vpView);

        adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), listFragment);
        viewPager.setAdapter(adapter);
    }
}

MyPagerAdapter.java

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
    private List<Fragment> listFragment;

    public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> listFragment) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.listFragment = listFragment;
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return listFragment.get(arg0);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listFragment.size();
    }
}

Fragment函数

import com.hch.svpre.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class VPFragment1 extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.viewpager1, container, false);
        return view;
    }
}

这里只写出一个Fragment函数,应写4个就可以,这里只是举个例子。
FrgmentPagerAdapter与FragmentStatePaterAdapter的区别;
使用FragmentPagerAdapter适配器不会运行Fragment函数中onDestroy()的方法,就是不会销毁,而后者会销毁。
注意:ViewPager中存在缓存机制,当你在第二页时,它会缓存第一和第三页,而第四页和其他页会自动销毁。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

viewpager的使用方法

  • 2015年09月25日 11:54
  • 7KB
  • 下载

android ViewPager嵌套的使用方法

本文用代码描述了ViewPager内部嵌套ViwePager的使用方法,经过测试没有问题,如在使用过程中有问题可及时沟通 首先在自己创建的项目中任选一个包来创建一个类继承ViewPa...

ViewFillper+ViewFlow+ViewPager的使用方法

  • 2014年03月07日 17:38
  • 2.51MB
  • 下载

ViewPager的基本使用方法

ViewPager和Fragment一样是在Android 3.0版本新添加的控件。现在我们先来看一个基本的示例了解一下ViewPager的基本功能。 先再Activity的布局文件中通过全类名...

Android ViewPager的使用方法

以前在写一个小app —— 个人博客客户端——My CSDN 的实现 的时候,就使用过ViewPager来呈现界面切换的效果,可是隔的时间长了,今天要使用的时候却忘了使用方法,琢磨了一下才又明白了 ...

Android ViewPager的简单使用方法

ViewPager的基本使用方法

ViewPager的使用方法(实现左右滑动切换页面)

首先加入ViewPager 加载显示的页卡

Android ViewPager基本使用方法

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如...
  • wsgqp
  • wsgqp
  • 2016年08月12日 15:55
  • 283

安卓框架——ViewPager的使用方法

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“android-support-v4.jar”。 使用ViewPager与...
  • zwl5670
  • zwl5670
  • 2015年09月07日 21:36
  • 468
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewPager使用方法
举报原因:
原因补充:

(最多只允许输入30个字)