ViewPager和Fragment

来源:互联网 发布:java线程是什么意思 编辑:程序博客网 时间:2024/06/05 20:04

ViewPager是一个能实现页面滑动切换效果的控件。要切换的页面时通过给Viewpager配置的Adapter里加载的。


ViewPager常用的两种adapter是PagerAdapter和FragmentPagerAdapter.PagerAdapter适用于功能相似的页面。


当使用PagerAdapter时,需要复写public void destroyItem(ViewGroup container, int position, Object object),public Object instantiateItem(ViewGroup container, int position),public void setPrimaryItem(ViewGroup container, int position, Object object),public int getCount(),public boolean isViewFromObject(View view, Object object)这几个方法。    通过adapterpublic int getCount() 方法来确定它要加载View的数量。通过adapterpublic Object instantiateItem(View container, int position)方法来具体加载View。第一个参数container是保存所有view的容器。一般重写这方法的时候需要在每次得到一个View时把这个通过 container.addView(view)的方法把view添加到container中一开始position是为默认为0,每向右滑动一页就position+1然后自动调用PagerAdapter里的instantiateItem方法position最大只能是getCount()取得的值。instantiateItem方法是返回一个view,这个view就是要被加载的页面。因为所有要切换的view都通过这个方法调用,所以没有办法根据不同的View设置不同复杂的功能。解决办法就是使用FragmentPagerAdapter。


使用FragmentPagerAdapter时,一般使用的activity是继承自FragmentActivity。继承FragmentPagerAdapter需要重写public Fragment getItem(int position)和public int getCount()方法。getItem()就是返回需要显示的fragment。一般要返回的fragment是要一开始就初始化好的。所有的fragment都在一开始初始化完并保存到一个List<Fragment>  fragmentList中,然后就在Adapter 的getItem方法中通过return fragmentList.get(positon)来返回要在加载的fragment。每个Fragment作用就跟Activity差不多,根据不同的需要来定义自己的页面和功能。每次调用Fragment都调用它的public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)方法来加载xml视图文件。


如果想要在ViewPager每次滑动一个页面时都执行一些动作,可以为这个ViewPager通过setOnPageChangeListener注册一个OnPageChangeListener监听器来监听滑动时要执行的任务。

0 0