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使用方法

viewpager常用与多页面滑动切换,通常也可与PagerTitleStrip,PagerTabStrip联用,PagerTabStrip继承自PagerTitleStrip。 // 给vie...
  • lrlr89
  • lrlr89
  • 2015年04月24日 09:55
  • 246

ViewPager+FragmentPagerAdapter的使用

这个组合是用ViewPager管理fragment,没有TabLayout,可以使用其他诸如按钮和文本控件来控制。 一、FragmentsActivity  /** * ViewPager+Frag...
  • xxkalychen
  • xxkalychen
  • 2016年12月18日 16:35
  • 696

Android的ViewPager,ViewPager配合Fragment的用法

MainActivity.java package com.hust.viewpaper; import java.util.ArrayList; import android.app.Acti...
  • tuke_tuke
  • tuke_tuke
  • 2016年05月29日 10:27
  • 642

Android ViewPager使用方法+ViewPager循环滑动

新手学习android的知识总结ViewPager是手机上最常见的效果,它能给用户带来很好的体验ViewPager的使用:①基于xml文件的ViewPager:(1)主xml文件中的代码如下(这里命名...
  • zhengyikuangge
  • zhengyikuangge
  • 2015年11月19日 15:45
  • 703

ViewPager和Fragment的组合使用

今天想看TabHost相关信息的时候,提示建议使用Fragment代替,然后就高出了下面的...
  • u013758734
  • u013758734
  • 2014年06月10日 16:11
  • 3241

Android ViewPager基本使用方法

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

ViewPager的使用方法

1、只实现界面的变化,手动
  • u012224319
  • u012224319
  • 2014年05月22日 15:31
  • 365

Android ViewPager使用方法小结

android-support-v4.jar 是谷歌提供给我们的一个兼容低版本安卓设备的软件包,里面包囊了只有在 Android 3.0 以上可用的API。而 ViewPager 就是其中之一。利用它...
  • jzyhywxz
  • jzyhywxz
  • 2017年03月26日 21:48
  • 1492

viewpager的使用方法

viewpager的最简单的使用方法,之所以说是简单的使用方法,是因为我们这里采用的是: 简单适配器即:PagerAdapter,当然我们的安卓中也有FragmentPagerAdapter:静态的...
  • Lin_Sir6
  • Lin_Sir6
  • 2015年12月29日 23:58
  • 534

ViewPager 使用方法详解

ViewPager 使用3中adapter的实现方式
  • u013647382
  • u013647382
  • 2015年01月05日 19:27
  • 1479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewPager使用方法
举报原因:
原因补充:

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