ViewPager 详解(二)——四大函数
来源:互联网 发布:围棋软件免费下载 编辑:程序博客网 时间:2024/06/11 12:07
pageradapter四大函数
每个滑动页面都对应一个Key,而且这个Key值是用来唯一追踪这个页面的,也就是说每个滑动页面都与一个唯一的Key一一对应
destroyItem()
该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除
@Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(viewList.get(position)); }
getCount ()
返回当前有效视图的个数
@Override public int getCount() { // TODO Auto-generated method stub return viewList.size(); }
instantiateItem (ViewGroup container, int position)
这个函数的实现的功能是创建指定位置的页面视图。适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!
返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key
在代码中,我们的责任是将指定position的视图添加到conatiner中
该函数返回值就是我们根据参数position增加到conatiner里的View的所对应的Key
在 finishUpdate(viewGroup)执行完后,有两个操作,一个是原视图的移除(不再显示的视图),另一个是新增显示视图(即将显示的视图)
@Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(viewList.get(position)); return viewList.get(position); } };
在这里,我们做了两件事
第一:将参数里给定的position的视图,增加到conatiner中,供其创建并显示
第二:返回当前position的View做为此视图的Key。还记得API官方文档中下面这段话么?
对于非常简单的pageradapter或许你可以选择用page本身作为键,在创建并且添加到viewgroup后instantiateItem方法里返回该page本身即可destroyItem将会将该page从viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object
这里就把当前的View当作Key传过出去
isViewFromObject (View view, Object object)
功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
返回值:如果对应的是同一个View,返回True,否则返回False
@Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; }
由于在instantiateItem()中,我们作为Key返回来的是当前的View,所以在这里判断时,我们直接将Key与View看是否相等来判断是否是同一个View
自定义Key实例
public class MainActivity extends Activity { private View view1,view2,view3; private ViewPager viewPager; private List<View> viewList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager)findViewById(R.id.viewpager); LayoutInflater layoutInflater = getLayoutInflater(); view1 = layoutInflater.inflate(R.layout.layout1,null); view2 = layoutInflater.inflate(R.layout.layout2,null); view3 = layoutInflater.inflate(R.layout.layout3,null); viewList = new ArrayList<View>(); viewList.add(view1); viewList.add(view2); viewList.add(view3); PagerAdapter pagerAdapter = new PagerAdapter() { @Override public boolean isViewFromObject(View view, Object object) { //return view == object; //根据传来的key,找到view,判断与传来的参数View view是不是同一个视图 return view == viewList.get((int)Integer.parseInt(object.toString())); } @Override public int getCount() { return viewList.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); //return viewList.get(position); return position; } }; viewPager.setAdapter(pagerAdapter); }}
改动了两个地方
1、先看Key的产生的位置instantiateItem()
@Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); //return viewList.get(position); return position; } };
我们在上讲也讲了在这个函数中Key是作为返回值与当前装入Container中的视图对应起来的。所以在这里我们返回postion与container.addView(viewList.get(position));里的viewList.get(position)这个视图对应起来
2、isViewFromObject ()
@Override public boolean isViewFromObject(View view, Object object) { //return view == object; //根据传来的key,找到view,判断与传来的参数View view是不是同一个视图 return view == viewList.get((int)Integer.parseInt(object.toString())); }
判断从instantiateItem()返回来的Key与当前的View是否能对应起来,我们知道从instantiateItem传过来的其实是position,所以我们要根据position找到View,然后跟参数中的View view判断
但在真正操作时出现了问题,我们要先将obect对应转换为int类型:(int)Integer.parseInt(object.toString());然后再根据position找到对应的View
总结自:启航大神的博客http://blog.csdn.net/harvic880925/article/details/38487149
- ViewPager 详解(二)—详解四大函数
- ViewPager 详解(二)——四大函数
- ViewPager 详解(二)---详解四大函数
- 《ViewPager 详解(二)---详解四大函数》
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数 .
- 《ViewPager 详解(二)---详解四大函数》
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- java 提交表单、文件防止脏数据
- SQL语句中limit的用法
- 二叉树前序、中序、后序非递归遍历实现(C语言)
- Tensorflow_Basic Usage
- 二叉树的建立,遍历查找
- ViewPager 详解(二)——四大函数
- Java vs. Kotlin:应该使用Kotlin进行Android开发吗?
- 【BZOJ2440】完全平方数(中山市选2011)-二分答案+莫比乌斯函数应用
- (135)点光源
- 设计模式-----观察者模式(Obsever)
- react-native 学习之旅
- Apache Cassandra3.10集群安装部署
- 16 個Kotlin Android开发技巧
- django中post提交表单时错误:CSRF verification failed. Request aborted