详解Android App中ViewPager使用PagerAdapter的方法

PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用。

要使用PagerAdapter,

首先要继承PagerAdapter类,至少覆盖以下方法:

在每次创建ViewPager或滑动过程中,以下四个方法都会被调用,而instantiateItem和destroyItem中的方法要自己去实现。

public abstract int getCount();

这个方法,是获取当前窗体界面数

public abstract boolean isViewFromObject(android.view.View arg0, java.lang.Object arg1);

这个方法用于判断是否由对象生成界面

public java.lang.Object instantiateItem(android.view.View container, int position);

这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中

public void destroyItem(android.view.ViewGroup container, int position, java.lang.Object object);

这个方法,是从ViewGroup中移出当前View

public class ViewPagerAdapter extends PagerAdapter{

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

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      // TODO Auto-generated method stub
      return false;
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
      // TODO Auto-generated method stub
      super.destroyItem(container, position, object);
    }

    @Override
    public Object instantiateItem(View container, int position) {
      // TODO Auto-generated method stub
      return super.instantiateItem(container, position);
    }

  }

ViewPager的PagerAdapter不可以更新数据问题的解决
在做项目的时候,发现即使调用了

galleryAdapter.notifyDataSetChanged();

但是ViewPager还是不会更新原来的数据。

后来在stackoverflow上面找到了方法,原文链接:
http://stackoverflow.com/questions/7263291/viewpager-pageradapter-not-updating-the-view
于是花了一点时间,修改了代码:

protected PagerAdapter galleryAdapter = new PagerAdapter() { 

  @Override
  public boolean isViewFromObject(View arg0, Object arg1) {
     return arg0 == ((View)arg1);
  } 

  @Override
  public int getCount() {
    return size;
  } 

  @Override
  public Object instantiateItem(View container, int position) {
    return bindGalleryAdapterItemView(container, position);
  } 

  @Override
  public void destroyItem(View container, int position, Object object) {
     ((ViewPager) container).removeView((View) object);
  }; 

    @Override
    public void finishUpdate(View arg0) {}  

    @Override
    public void restoreState(android.os.Parcelable state, ClassLoader loader) { 

    }; 

    @Override
    public Parcelable saveState() {
      return null;
    }  

    @Override
    public void startUpdate(View arg0) {}  

    @Override
    public int getItemPosition(Object object) {
    return POSITION_NONE;
    } 

};

注意:POSITION_NONE 是一个PagerAdapter的内部常量,值是-2,
API里面有说明:

int android.support.v4.view.PagerAdapter.POSITION_NONE = -2 [0xfffffffe]

可以更新数据了。嘿嘿。

(0)

相关推荐

  • Adapter模式实战之重构鸿洋集团的Android圆形菜单建行

    对于很多开发人员来说,炫酷的UI效果是最吸引他们注意力的,很多人也因为这些炫酷的效果而去学习一些比较知名的UI库.而做出炫酷效果的前提是你必须对自定义View有所理解,作为90的小民自然也不例外.特别对于刚处在开发初期的小民,对于自定义View这件事觉得又神秘又帅气,于是小民决定深入研究自定义View以及相关的知识点. 在此之前我们先来看看洋神的原版效果图: 记得那是2014年的第一场雪,比以往时候来得稍晚一些.小民的同事洋叔是一位资深的研发人员,擅长写UI特效,在开发领域知名度颇高.最近洋叔刚

  • Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门

    学习目的: 1.掌握在Android中如何建立Gallery 2.初步理解Android适配器的原理 3.实现简单的控件缩放动画 简介: 1.Gallery是Android内置的一个控件,它可以继承若干图片甚至是其他控件 2.Gallery自带了滚动播放图片功能,此功能您可以通过模拟器拖曳鼠标或者在手机上拖拽验证 3.Gallery需要适配器来传输数据,如果您不熟悉"适配器设计模式",可以将适配器理解为某厂商的电脑适配器,只要这个厂商的所有型号的电脑都能使用该适配器,也就是说,设计新型

  • Android Adapter的几个常用方法

    Android Adapter的几个常用方法分享给大家,具体内容如下 1  ListView是在什么时候设置对Adapter的数据监听的? 在setAdapter(ListAdapter adapter)中,会先取消ListView中原来的mAdapter中的数据监听(mAdapter.unregisterDataSetObserver(mDataSetObserver);),然后再设置对新设置的adapter的数据监听. 2  getView(int position, View conver

  • Android自定义viewgroup 使用adapter适配数据(6)

    在自定义viewgroup(5):http://www.jb51.net/article/100639.htm的基础上,添加使用adapter来适配数据,这样更加的方便,这里只是使用adapter适配数据,不能更新. package com.example.libingyuan.horizontallistview.ScrollViewGroup; import android.content.Context; import android.util.AttributeSet; import a

  • android开发中ListView与Adapter使用要点介绍

    1. Adapter.getView() public View getView(int position, View convertView , ViewGroup parent){...} 这个方法就是用来获得指定位置要显示的View.官网解释如下: Get a View that displays the data at the specified position in the data set. You can either create a View manually or infl

  • Android中BaseAdapter用法示例

    本文实例讲述了Android中BaseAdapter用法.分享给大家供大家参考,具体如下: 概述: BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView.Spinner.Gallery及GridView等UI显示组件,它是继承自接口类Adapter BaseAdapter Java代码: public class RecentAdapter extends BaseAdapter { private class RecentVi

  • Android自定义Adapter的ListView的思路及代码

    在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的.若采用系统自带的适配器,就不能精确到每个控件的响应事件.这时,我们一般采取自定义适配器来实现这个比较精确地请求. ListView

  • Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewHol

  • Android listview与adapter详解及实例代码

    一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器.适配器是一个连接数据和AdapterView(ListView就

  • Android中 自定义数据绑定适配器BaseAdapter的方法

    复制代码 代码如下: public class PersonAdapter extends BaseAdapter { private List persons;// 要绑定的数据 private int resource;// 绑定的一个条目界面的id,此例中即为item.xml private LayoutInflater inflater;// 布局填充器,它可以使用一个xml文件生成一个View对象,可以通过Context获取实例对象 public PersonAdapter(Conte

  • 举例讲解Android应用中SimpleAdapter简单适配器的使用

    SimpleAdapter,跟名字一样,一个简单的适配器,既为简单,就只是被设计来做简单的应用的,比如静态数据的绑定,不过仍然有自定义的空间,比如说在每一个ListItem中加一个按钮并添加响应事件.首先还是先看一下SimpleAdapter的定义吧,直接翻译下SDK doc 吧: 这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图.你可以指定由Map组成的List(比如ArrayList)类型的数据.在ArrayList中的每个条目对应List中的一行.Maps包含每一行的数据

  • Android中的Adapter简单介绍

    Android中的Adapter在自定义显示列表时非常有用,比如SimpleAdapter,它的构造函数是: public SimpleAdapter (Context context, List> data, int resource, String[] from, int[] to) 它的各参数的意思: 1.context,上下文,SimpleAdapter关联的视图,一般而言就是当前的Activity,this 2.data,泛型的List,如ArrayList,Map或者HashMap

  • Android编程实现在adapter中进行数据操作的方法

    本文实例讲述了Android编程实现在adapter中进行数据操作的方法.分享给大家供大家参考,具体如下: package com.cvte.apkclassify; import java.util.ArrayList; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.p

随机推荐