官方英语原文地址:http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
(它是)基类,它提供适配器,该适配器能填充页面内容到ViewPager中。
你可能更喜欢使用它的特殊实现类,比如:FragmentPagerAdapter 或FragmentStatePagerAdapter。
当你实现一个PageAdapter的时候,你至少必须要重载(override)下面几个方法:
· instantiateItem(ViewGroup, int)--实例化条目
· destroyItem(ViewGroup, int, Object)--销毁条目
· getCount()--获取条目数量
· isViewFromObject(View, Object)
PagerAdapter,比AdapterViews所使用的适配器,更常用。
在更新过程中,ViewPager使用回调(callbacks),来指示到哪一步了,而不是提供一套View直接回收的机制。
如果需要的话,PagerAdapter可以实现一种View回收机制,或者使用一个更加复杂的方法,来管理page view,
例如,Fragment的处理方式:每个页面都由它自己的Fragment来展现。
ViewPager都关联一个key对象,而不是直接与Views关联。
这个key用来跟踪并唯一标识指定的页面,它独立于其在适配器中的位置。
对PagerAdapter的startUpdate(ViewGroup)方法的一次调用,标志着ViewPager的页面内容即将改变。
随后,会调用若干次instantiateItem(ViewGroup, int) 或destroyItem(ViewGroup, int, Object),
最后,会调用 finishUpdate(ViewGroup),这意味着本次更新将要结束了。
等到finishUpdate返回时,与instantiateItem返回的key对象关联的view,应该被添加到其父控件ViewGroup中了,
而与传递给destroyItem
的这些key关联的view,应该被移除了。
isViewFromObject(View, Object)方法用于判断某个view是否与key对象关联。
一个简单的PagerAdapter,可以用page Views本身当为key对象;
创建并添加到ViewGroup中后,可以instantiateItem(ViewGroup, int)中返回它;
对应的destroyItem(ViewGroup, int, Object)的实现,从父控件ViewGroup中删除它;
isViewFromObject(View, Object) 可以这样实现:return view == object;.
PagerAdapter支持数据集(data set)的变更更新。
但数据集变更,必须发生在主线程中,并且最后要调用notifyDataSetChanged()方法,
这点与从BaseAdapter派生的AdapterView的适配器,很相似。
数据集的改变,可以包含pages的添加,删除或位置改变。
ViewPager将保持当前的页面处于active状态,它由实现了getItemPosition(Object)方法的适配器提供。
public Object instantiateItem (ViewGroup container, int position)
在指定的位置创建页面;适配器负责添加view到这个容器中,然而它只保证在finishUpdate(ViewGroup)返回时才完成。
public void destroyItem (ViewGroup container, int position, Object object)
删除指定位置的页面;适配器负责从view容器中删除view,然而它只保证在finishUpdate(ViewGroup)返回时才完成。
public abstract int getCount ()
返回可用的view的数量。
public abstract boolean isViewFromObject (View view, Object object)
判断页面是否跟指定的key对象关联,key对象由instantiateItem(ViewGroup, int)返回。
ViewPager源码,你去看下addNewItem方法,会找到instantiateItem的使用方法,注意这里的mItems变量。然后你再搜索下isViewFromObject,会发现其被infoForChild方法调用,返回值是ItemInfo。再去看下ItemInfo的结构,其中有一个object对象,该值就是instantiateItem返回的。
也就是说,ViewPager里面用了一个mItems(ArrayList)来存储每个page的信息(ItemInfo),当界面要展示或者发生变化时,需要依据page的当前信息来调整,但此时只能通过view来查找,所以只能遍历mItems通过比较view和object来找到对应的ItemInfo。
简单的说就是PageView有个私有属性private final ArrayList<ItemInfo> mItems = new ArrayList<ItemInfo>();当调用addNewItem(int,int)时
void addNewItem(int position, int index){ ItemInfo ii = new ItemInfo(); ii.position = position; ii.object = mAdapter.instantiateItem(this, position); if (index < 0) { mItems.add(ii); } else { mItems.add(index, ii); } }
相关推荐
在本篇文章中,我们将深入探讨 `PagerAdapter` 的使用方法及其在实际开发中的应用。 首先,我们了解 `PagerAdapter` 的基本概念。`PagerAdapter` 是一个接口,位于 `android.support.v4.view` 包下,它的主要职责是...
自定义`PagerAdapter`通常涉及`instantiateItem`和`destroyItem`方法的重写,以及使用`LayoutInflater`加载布局文件。开发者可以通过导入和学习示例项目来快速掌握`PagerAdapter`的用法,提高应用开发效率。
PagerAdapter是一个抽象类,你需要创建它的子类并实现其中的关键方法,如`instantiateItem()`、`destroyItem()`和`isViewFromObject()`等,以便为ViewPager提供页面视图。 1. **PagerAdapter的实现** - `...
`PagerAdapter`会根据这个方法的返回值来决定何时加载或销毁页面。 3. `instantiateItem(ViewGroup container, int position)`: 创建或恢复在给定位置的页面。这个方法默认会调用`getItem(int position)`,因此通常...
标题中的“在PagerAdapter添加GridView”指的是在Android开发中如何将GridView与PagerAdapter结合使用,以便在ViewPager中展示一个可滑动的GridView视图。这通常用于创建一个卡片式或页面式的浏览体验,用户可以通过...
1. **PagerAdapter**:理解PagerAdapter的工作原理,如何重写`getCount()`、`instantiateItem(ViewGroup, int)`和`destroyItem(ViewGroup, int, Object)`等方法来管理页面的数量和生命周期。 2. **ViewPager**:...
为了使用PagerAdapter,你需要创建一个新的类,直接继承自PagerAdapter,并实现其关键方法: 1. `public abstract int getCount();`: 这个方法返回ViewPager中页面的数量。根据你的数据源,你需要计算出需要展示的...
3. **设置适配器**:使用`setAdapter()`方法将我们创建的PagerAdapter实例赋值给ViewPager。 4. **关联布局**:确保在布局文件中包含ViewPager,并为其指定一个ID。 5. **可选:设置PageTransformer**:如果需要...
Android中的`PagerAdapter`是用于与ViewPager配合使用的适配器,它允许用户在多个视图之间进行滑动,常用于创建类似轮播图、标签页等交互界面。在本示例中,我们将探讨如何仿照Adapter实现自定义的PagerAdapter,以...
开发者需要实现`PagerAdapter`中的方法,如`instantiateItem()`和`destroyItem()`,以填充和移除ViewPager的页面。`PagerAdapter`提供了基础的页面管理和生命周期管理功能。 `FragmentPagerAdapter`是`PagerAdapter...
`PagerAdapter`需要实现`INfinitePagerAdapter`接口,其中包含`getCount()`(返回子视图数量)和`instantiateItem(ViewGroup, int)`(创建并添加子视图到`ViewPager`)等方法。 在实际项目中,使用`ViewPager`和`...
首先,PagerAdapter是Android SDK中的一个抽象类,位于`android.support.v4.view`包下(如果使用的是AndroidX库,则位于`androidx.viewpager.widget`包下),它是ViewPager的数据适配器,用于为ViewPager提供页面...
在这个"FragmentStatePagerAdapterDemo"中,我们将深入探讨它的实现原理和使用方法。 首先,FragmentStatePagerAdapter 的主要优势在于它可以保存并恢复 Fragment 的状态。当用户在 ViewPager 中浏览时,只有当前...
总的来说,封装PagerAdapter实现类是提高代码效率和减少重复工作的好方法,尤其是在频繁使用ViewPager与各种数据源结合的场景下。通过这种方式,开发者可以专注于业务逻辑,而不是基础的视图创建和管理。
1. **正确实现`PagerAdapter`**:你需要确保你的`PagerAdapter`类(通常是`ViewPagerAdapter`或`FragmentPagerAdapter`)正确实现了`getItemPosition()`方法。这个方法告诉`ViewPager`某个项的位置是否改变,如果...
在本篇文章中,我们将深入探讨ViewPager的工作原理以及如何有效地使用PagerAdapter进行适配。 1. **ViewPager的基本概念** ViewPager本质上是一个可以容纳多个View的容器,每个View代表一个页面。用户可以通过水平...
这里,`MyPagerAdapter`需要继承自`PagerAdapter`,并重写`instantiateItem()`和`destroyItem()`方法,以提供页面实例和处理页面的创建与销毁。如果你的页面是`Fragment`,可以使用`FragmentPagerAdapter`或`...