详解Android App中ViewPager使用PagerAdapter的方法
作者:tinyphp 发布时间:2021-12-06 06:11:52
标签:Android,ViewPager
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]
可以更新数据了。嘿嘿。


猜你喜欢
- HandlerThread 顾名思义就是一种可以使用 Handler 的 Thread。日常开发中我们经常会通过创建一个 Thread 去执
- 示例接口定义为了方便笔者先自己写了个简单的接口用于展示,返回当前时间,具体如下/// <summary>/// GetToday
- 消息的可靠投递在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用
- 主要是重写attemptAuthentication方法导入依赖<dependency><groupId>org.s
- Android移动开发实现简单计算器功能,供大家参考,具体内容如下前言android 开发小实验android 移动开发实现 简易计算器功能
- RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,
- java 使用DecimalFormat进行数字的格式化实例详解简单实例://获取DecimalFormat的方法DecimalFormat
- 发现问题最近在进行压测发现,有一些接口时好时坏,通过sentry日志平台及sky walking平台跟踪发现,用户张三获取到的用户上下文确是
- SpringMVC中的 * 用于拦截控制器方法的执行,执行在Controller前后,和视图渲染完成后。如下图所示:一、创建 * 继承Han
- 本文实例讲述了C#简单实现显示中文格式星期几的方法。分享给大家供大家参考,具体如下:1.DateTime.Now.ToString(&quo
- 前言本文主要给大家介绍了关于spring mvc注解@ModelAttribute妙用的相关内容,分享出来供大家参考学习,下面话不多说了,来
- Spring MVC整合SpringBoot提供为整合MVC框架提供的功能特性内置两个视图解析器:ContentNegotiatingVie
- 一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想
- 前言该文章为对工作中部分业务实现的总结,阅读时间:20分钟,版本:Android 6.0 - 9.0 update time 2021年02
- maven-compiler-plugin编译Java源码,一般只需设置编译的jdk版本<plugin> <g
- android欢迎页自动跳转及手机网络检测,具体实现代码如下所示:在1.2s后从欢迎页(welcome)跳转到登陆页(Login_Activ
- 在实际项目的开发过程中,所涉及的EXCEL往往会比较复杂,并且列中还会带有一些计算公式,这就给读取带来了很大的困难,曾经尝试过一些免费的第三
- 效果如下: 布局文件activity_main.xml如下:<RelativeLayout xmlns:android="h
- 该配置基于IDEA2020.1版本,如后续有版本更新或者配置变更,再更新idea64.exe.vmoptions配置为提供IDEA启动速度和
- 这篇文章主要介绍了Java如何把数组转换为ArrayList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需