Google 前段时间出了新品 ViewPager2,据说意在替代旧版 ViewPager,功能更强大使用更方便;真的这么香么,小菜尝试学习一下!

优势

  1. 支持 RTL 布局,稍后介绍;
  2. 支持垂直方向切换;
  3. 支持 Fragment 集合刷新,即 notifyDataSetChanged

版本

ViewPager2 目前处于预览版,还没有合并到主分支,可能还会有一些隐藏小问题,建议大家先尝试一下;

implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'

问题

小菜尝试第一步要引入 ViewPager2,而此时就出现一个大问题,如下:

小菜当前 SDK 已是最新版本,首先按照提示在 AndroidManifest->application 添加错误中要求的,但是并不能解决问题,之后查阅了很多资料,发现 AndroidxAndroid support不共存,这可真是麻烦了,如果在实际的项目中直接用可麻烦大了;

解决

既然不兼容,只好先转到 Androidx 库下,chenzhenlindx大神的博客很有帮助;

  1. 工程 -> Refactor -> Migrate to Androidx
  2. 提示是否保存以前工程 zip 文件,看个人需求;
  3. 按提示 Do Refactor 重构即可;

尝试

小菜尝试绑定不同背景色和文字内容;与 ViewPager 不同的是,适配器需要使用 RecyclerView.Adapte,这也意味着绑定数据的方式更灵活,小菜为了测试 ViewPager2 新特性,设置了点击事件;

  1. 借助 setOrientation() 方法可以动态改变切换方向,水平或竖直;
  2. 借助 notifyDataSetChanged() 方法可以实时更新数据;
  3. 借助 setLayoutDirection() 方法可以动态调整内容展示方位,从左到右或从右到左;

此时感觉 ViewPager2 真的很方便,尤其是实时更新数据和动态调整切换方向,真香!

public class ViewPagerActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener {private ViewPager2 mVp;private List<Integer> list = new ArrayList<Integer>();private MyAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_view_pager);if (list != null) list.clear();list.add(Color.RED);list.add(Color.GRAY);list.add(Color.BLUE);list.add(Color.YELLOW);mVp = (ViewPager2) findViewById(R.id.view_pager);adapter = new MyAdapter(this, list);mVp.setAdapter(adapter);adapter.setOnItemClickListener(this);}@Overridepublic void onItemClick(int position) {Toast.makeText(getApplication(), "当前position=" + (position + 1), Toast.LENGTH_SHORT).show();switch (position){case 0://mVp.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);break;case 1:list.set(position, Color.GREEN);adapter.notifyDataSetChanged();break;case 2:mVp.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);break;case 3:mVp.setOrientation(ViewPager2.ORIENTATION_VERTICAL);break;}}
}class MyAdapter extends RecyclerView.Adapter {Context context;List<Integer> list;MyAdapter(Context context, List<Integer> list) {this.context = context;this.list = list;}private OnItemClickListener mOnItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.mOnItemClickListener = onItemClickListener;}public interface OnItemClickListener {void onItemClick(int position);}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view_pager, parent, false);final MyViewHolder mViewHolder = new MyViewHolder(v);v.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick((Integer) v.getTag());if((Integer) v.getTag()==0){mViewHolder.mTv.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);}}}});return mViewHolder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {((MyViewHolder) holder).mLay.setBackgroundColor(list.get(position));((MyViewHolder) holder).mTv.setText("当前 position = "+(position+1));((MyViewHolder) holder).itemView.setTag(position);}@Overridepublic int getItemCount() {return list != null ? list.size() : 0;}class MyViewHolder extends RecyclerView.ViewHolder {LinearLayout mLay;TextView mTv;public MyViewHolder(View itemView) {super(itemView);mLay = (LinearLayout) itemView.findViewById(R.id.item_view_pager_lay);mTv = (TextView) itemView.findViewById(R.id.item_view_pager_tv);}}
}


扩展

小菜以前没有注意过 supportsRtl 属性,实际很久以前就有了,根据设置内容居左或居右;

  1. 需要 AndroidManifest->application 中添加 android:supportsRtl="true" 属性;
  2. 内边距和外边距建议设置 start/end 方式;
  3. ViewPager2 中设置 setLayoutDirection 时,整个 ViewPager2 不仅子 item 内容反向,整体也反向;只有子 item 设置 setLayoutDirection 时会反向。

小结

小菜在学习过程中发现 ViewPager2 确实有很大优势,只是目前还没有发布到正式版,而且对于版本适配也会有一定难度,对于 Fragment 的懒加载与预加载还有待研究;但是学习体验一下还是很有帮助的!


如果有不对的地方还希望多多指出!

Android ViewPager2 真的香么?相关推荐

  1. 4a怎么打开sqlserver_百元级别荣耀路由X3和小米路由4A,哪款真的香?

    百元级别荣耀路由X3和小米路由4A,哪款真的香? 路由器是每个家庭的网络中枢,那么如何选购一款经济又实惠的路由器呢?尤其是从网络信号的稳定性.穿墙力度等方面,怎么才能买到最适合自己的路由器呢?今天id ...

  2. Android开发真的要凉凉吗

    2008年,是中国互联网发展的10周年,同时也是智能手机的元年.在这一年,Google正式发布Andoid操作系统,统一了智能手机操作系统平台.凭借着移动互联发展的浪潮,智能手机应用软件(APP)快速 ...

  3. 5款100元千兆WiFi5路由器,刷机玩真的香

    我"捡"了5款100元路由器,真的香 2019年09月24日 我淘了5款百元路由器,是真的香. 移动互联网高速发展的今天,我们对网络的需求.要求也日益提高.5G 的普及和真正实用又 ...

  4. Android - ViewPager2

    文章目录 1. 效果 1. 添加ViewPager2控件 2. MainActivity.java中添加ViewPager2 3. 创建ViewPager中的页面 4. 添加ViewPagerAdap ...

  5. Android - ViewPager2 Fragment

    文章目录 1. 效果 2. 添加ViewPager2控件 3. 添加Fragment页面 4. 添加FragmentStateAdapter类的继承类 5. 添加ViewPager2的逻辑 6. 示例 ...

  6. Swagger3.0 天天刷屏,真的香吗?

    目录 前言 官方文档如何说? Spring Boot版本说明 添加依赖 springfox-boot-starter做了什么? 撸起袖子就是干? 定制一个基本的文档示例 文档如何分组? 如何添加授权信 ...

  7. 一致吗 驱动_iPhone 12无线充电真的香吗?

    2020年10月14日凌晨1点, 苹果发布会又来了, 开场就是苹果CEO库克在总部贾伯斯剧院闪亮登场! 没错! 各位果粉心心念念的 iPhone 12 它走来了! 如之前爆料所言,本次发布会共推出了4 ...

  8. Ubuntu下的lammps GPU加速(真的香)

    参考 Lammps实现GPU加速,博客界面很好看. 显卡驱动安装(本文默认为英伟达) - 检查自己的驱动是否安装成功 nvidia-smi 如果安装成功会有如下输出: 如果未安装会有如下结果: nvi ...

  9. Android viewpager2 + indicator 实现页面滑动

    在build.gradle里面添加依赖 implementation 'com.tbuonomo:dotsindicator:4.2'implementation 'androidx.viewpage ...

最新文章

  1. mstsc局域网远程 要预先做的设置
  2. Python Levenshtein(两个文本比较,两个字符串比较)
  3. Powershell创建数组
  4. 企业办公3D指纹考勤系统解决方案(一)
  5. 杭电oj2035c语言答案,小白详细讲解快速幂--杭电oj2035-A^B
  6. win10右键卡顿原因_个个都能惊呆你WIN10小技巧分享(无需安装第三方软件)
  7. 生物信息学软件_高通量测序技术|生信的发展,常用数据格式及分析软件
  8. Day03 爬取京东商品信息+元素交互操作+BeautifulSoup4
  9. (1)统一流程管理平台--前言
  10. JS 函数参数及其传递
  11. 什么是RESTful风格的API设计?
  12. sencha app watch php,使用新的SenchaCmd4命令appwatch
  13. iOS 手机照片上传服务器方向不对的原因以及解决方法
  14. stata两种方法制作限制立方条图
  15. 您的云,您做主:Google Distributed Cloud Hosted 全面可用
  16. 如何保存微信视频到本地,微信朋友圈怎么发本地的视频。
  17. 2022级计算机保研历程
  18. ESP32固件安装和基础测试
  19. 2019牛客多校第十场 F.Popping Balloons
  20. dubbo服务注册ip地址不正确,rpc服务调用失败?

热门文章

  1. Spring 的IOC容器系列的设计与实现:BeanFactory 和 ApplicationContext
  2. 读《程序员必读的职业规划书》
  3. Java 集合类图(转)
  4. Spring 系列,第 3 部分: 进入 Spring MVC
  5. 上古时期的 TeX Users 都有哪些当今 TeX Users 无法想象的神级操作?
  6. 3.获得单应矩阵(每张图片需要m个棋盘格角点,m≥4)
  7. 学会选择最适合自己的GPS定位系统源码
  8. Redis命令——发布订阅
  9. ElasticSearch---------------------Elasticsearch Clients---------------------JAVA API
  10. CentOS环境下tomcat启动超级慢的解决方案