Android中的ViewPager和 PagerAdapter的初步理解和使用

    ViewPager中文为页卡。能够实现视图的滑动效果,它需要和PagerAdapter一起使用,PagerAdapter是在ViewPager切换视图时提供给它一些数据和数据的管理。


   视图滑动的效果需要三个步骤实现:

 1:在布局文件中创建

     <android.support.v4.view.ViewPager
         android:id="@+id/vpMain"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
      />此标签。

          注意:此标签的位置是根据自己的需求来给定它的位置的,可以自己决定切换的位置和切换区域的大小。

          

<pre name="code" class="html"><LinearLayout 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"
    android:orientation="vertical"
     >

    
    <TextView 
        android:id="@+id/tvText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="手机滑屏"
        android:textSize="30sp"/>
    
    <!-- 切换视图区域-->
    <android.support.v4.view.ViewPager
       android:id="@+id/vpMain"
       android:layout_width="match_parent"
	   android:layout_height="wrap_content"
        />
    
    
</LinearLayout>
 

2:创建要切换的布局文件

3:在Activity中加载布局文件,用ViewPager.setPagerAdapter(PagerAdapter的对象);来关联页面管理器。使用LayoutInflater类来加载布局文件。

     

package com.example.huadong;

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {
	//定义一个队列来保存各个布局文件
		ArrayList<View> list_view= new ArrayList<View>();
		
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        //初始化页卡对象
        ViewPager mainview =(ViewPager) findViewById(R.id.vpMain);
        
        //获取界面的布局加载器,将布局文件加载到程序中
        LayoutInflater inflater=getLayoutInflater();
        //第二种方式: inflater=LayoutInflater.from(this);
       
        //将布局加载到程序中
        View first =inflater.inflate(R.layout.first, null);
        View second=inflater.inflate(R.layout.second, null);
        View three =inflater.inflate(R.layout.three, null);
        list_view.add(first);
        list_view.add(second);
        list_view.add(three);
        //定义一个页面管理器
        PagerAdapter pageadapt=new PagerAdapter() {
    		
    		public boolean isViewFromObject(View arg0, Object arg1) {
    			return arg0==arg1;
    		}
    		
    	public Object instantiateItem(android.view.ViewGroup container, int position) {
    		container.addView(list_view.get(position));
                  return list_view.get(position);
    		
    	};
    		public void destroyItem(android.view.ViewGroup container, int position, Object object) {
    			container.removeView(list_view.get(position));
    		};
    		
    		public int getCount() {
    			return list_view.size();
    		}
    		};
    		
       mainview.setAdapter(pageadapt);
    }


}


注意:实现PagerAdapter时,必须要实现该类中的4个方法:

                  a:public boolean isViewFromObject(View arg0, Object arg1) {};

         b:public Object instantiateItem(android.view.ViewGroup container, int position) {};

         c:public void destroyItem(android.view.ViewGroup container, int position, Object object){};

         d:public int getCount(){};

       方法a:是根据方法b返回的一个键值,判断键值所对应的View视图和方法b中添加的View视图是否一致,及判断是否是同一个View。

      方法b:向ViewGroup中添加下一个将要显示的View,所以方法a:就是判断下一个将要显示的View是否正确。

       注意:ViewGroup中最多只有3个视图:当前正在显示的视图;正在显示视图的下一个视图;和正在显示视图的上一个视图。

     特殊情况是:第一次进入程序时,要执行两次方法b:第一次是将队列中的第一张视图显示出来,第二次是将下一个将要展示的视图正确的存入ViewGroup中。当前后不能切换时,只是执行方法d.

              方法c: 会根据传入的position参数来移除ViewGroup中的指定视图,主要是保证ViewGroup中最多存在3个视图。

     方法d: 在第一次进入程序是会首先执行两次,返回的值是切换视图的总数,此方法在用户触摸屏幕过程中会一直执行。当返回值大于总的视图数时,会出现文件找不到的异常,当返回值小于总的视图数时,会出现有些视图不能显示的问题。产生的原因是:方法d 返回整个视图队列的长度,后台程序会根据这个长度来设置加载和删除视图的上限。后台根据方法d 的返回值和用户切换的方向来给出position参数的值,即需要加载或移除视图在视图队列中的下标。此下标的最大值比方法d 的返回值小1。因为下标是从0开始。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值