【Android基础】ViewPager
ViewPage是一个ViewGroup,可以包含很多的View,当手指在屏幕上左右滑动的时候,可以切换页面。ViewPager一般与Fragment结合使用比较方便。
一、ViewPager监听
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * 页面滚动过程中回调 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { /* * position 被拖得页面的位置 * positionOffset 当前页面偏移的比例0--0.999999... * positionOffsetPixels 当前页面偏移的像素值 */ } /** * 页面选中回调 */ @Override public void onPageSelected(int position) { } /** * 页面状态改变时回调 */ @Override public void onPageScrollStateChanged(int state) { } });
二、ViewPager与适配器
1、PagerAdapter
A、介绍PageAdapter 是 ViewPager 的支持者,ViewPager 将调用它来取得所需显示的页,而 PageAdapter 也会在数据变化时,通知 ViewPager。这个类也是FragmentPagerAdapter 以及 FragmentStatePagerAdapter 的基类。如果继承该类,至少需要实现 instantiateItem(), destroyItem(), getCount()以及 isViewFromObject()四个方法。
1)Object instantiateItem(ViewGroup container, int position):往ViewPager中添加要显示的条目内容。参数一:ViewPager,参数二:条目的位置,返回值:显示在屏幕上的对象
2)void destroyItem(ViewGroup container, int position, Object object):从当前的ViewPager容器中删除指定位置的View对象。
3)getCount ():返回要滑动的View的个数。
4)boolean isViewFromObject(View view, Object object):该方法用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View) 返回值:如果对应的是同一个View,返回True,否则返回False。一般返回view==object
1)在布局文件中添加ViewPager控件。注意:写这个控件的时候要写全称(包名+类名)
<androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/view_pager"/>
2)加载要显示的页面,并把要显示的页面放入数组或List 集合中
viewPager = findViewById(R.id.view_pager); List<View> viewList = new ArrayList<>(); LayoutInflater layoutInflater = getLayoutInflater(); view1 = layoutInflater.inflate(R.layout.view_pager1, null); view2 = layoutInflater.inflate(R.layout.view_pager2, null); viewList.add(view1); viewList.add(view2);
3)写自己的Adapter,继承PagerAdapter
public class MyAdapter extends PagerAdapter { private List<View> viewList; public MyAdapter(List<View> arrayList) { this.viewList = arrayList; } @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(viewList.get(position)); } }
4)设置它的Adapter
MyAdapter myAdapter = new MyAdapter(viewList); viewPager.setAdapter(myAdapter);
2、FragmentPagerAdapter
A、介绍FragmentPagerAdapter是PagerAdapter的其中一种实现(其子类)。它将每一个页面表示为一个 Fragment,并且每一个Fragment都将会保存到fragmentManager当中。而且,当用户没可能再次回到页面的时候,fragmentManager才会将这个Fragment销毁。
让Fragment 成为ViewPager的一页时,FragmentManager会一直保存管理创建好了的Fragment,即使当前不是显示的这一页,Fragment对象也不会被销毁,在后台默默等待重新显示。但如果Fragment不再可见时,它的视图层次会被销毁掉,下次显示时视图会重新创建。
使用FragmentPagerAdapter至少需要实现以下两个方法:getCount()和getItem()
1)int getCount():返回要滑动的View的个数。
2)Fragment getItem(int position):要显示的fragent对象
1)在布局文件中添加ViewPager控件。注意:写这个控件的时候要写全称(包名+类名)
<androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pager"/>
2)建多个fragment类
public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.test_fragment, container, false); } }
public class TestFragment2 extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.test_fragment2, container, false); } }
3)加载要显示的页面,并把要显示的页面放入数组或List 集合中
viewPager = findViewById(R.id.pager); List<Fragment> list = new ArrayList<>(); list.add(new TestFragment()); list.add(new TestFragment2());
4)写自己的Adapter,继承PagerAdapter
public class MyPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; public MyPagerAdapter(@NonNull FragmentManager fm, List<Fragment> list) { super(fm); this.fragmentList = list; } @NonNull @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } }
5)设置它的Adapter
MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), list); viewPager.setAdapter(myPagerAdapter);
- 点赞
- 收藏
- 分享
- 文章举报
- android 电话监听和拦截
- SVN在AndroidStudio中的使用(一),SVN安装配置和项目检出更新
- SVN在AndroidStudio中的使用(二),文件忽略、服务器连接和项目上传
- SVN在AndroidStudio中的使用(四),分支创建和切换、分支主干合并、分支之间合并和冲突解决
- Android VideoView简单播放视频
- Android 学习笔记 线程操作 异步任务 AsyncTask
- Android学习路线指南
- Android学习之旅(1)——XML的写入与解析
- 学习笔记(Android Studio)1
- 学习笔记(Android Studio)2
- android system server and service manager
- 01 初识Android
- AndroidStudio+Cmake,NDK图文详解超简单
- Android图形基础(Android Studio版)
- Android设置无标题栏 、状态栏
- Android_tools_adb_monkey测试
- android 编译boot.img、dt.img、uboot.bin脚本
- Android studio Json数据的使用步骤
- Android studio创建数据库附加图片
- Android Spinner排序 ListView显示数据