博客
关于我
官方 Viewpager 升级版 - ViewPager2 实战
阅读量:740 次
发布时间:2019-03-17

本文共 3288 字,大约阅读时间需要 10 分钟。

ViewPager2 开发指南

ViewPager2 是 Google 在 Android 组件包中新增的替代 ViewPager 组件,旨在解决前一个版本中的主要痛点。当前已发布两个 Alpha 版本,该文档将详细介绍 ViewPager2 的功能、使用方法及与前一个版本的区别,并提供实际代码示例。

1. 引入 ViewPager2 组件

为了使用 ViewPager2,需要在项目依赖中添加相应的库文件。

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

接下来,在 XML 文件中声明 ViewPager2 组件。在 HorizontalScrollingActivity 中的 layout 文件中添加:

oston.xml

2.1 水平滚动

水平滚动是 ViewPager2 的默认配置方式。在代码中,可以通过设置 layout 文件中的 ViewPager2 组件来实现,默认即可支持水平滚动。

创建简单的 Page 项布局 item_page.xml:

```xml
```

2.2 竖直滚动

如果需要垂直滚动,只需在 Activity 类中调用简单的方法即可。

viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);

就能实现竖直方向的滚动效果。如此简洁的实现方式,远胜过传统做法需要依赖第三方库或自行实现的方式。

2.3 FragmentStateAdapter 的使用

ViewPager2 现在支持 FragmentStateAdapter,相比于旧的 FragmentPagerAdapter,新增了许多优化。以下是一个简单的示例。

创建 PageFragment 类,接收两个参数并展示内容:

```java public class PageFragment extends Fragment { private static final StringExtra COLORS = "colors"; private static final StringExtra POSITION = "position";
public static PageFragment newInstance(List
colors, int position) {
Bundle args = new Bundle();
args.putSerializable(COLORS, colors);
args.putInt(POSITION, position);
PageFragment fragment = new PageFragment();
fragment.setArguments(args);
return fragment;
}
private List
mColors;
private int mPosition;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
Bundle args = getArguments();
mColors = (List
) args.getSerializable(COLORS);
mPosition = args.getInt(POSITION);
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.item_page, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RelativeLayout container = view.findViewById(R.id.container);
TextView tvTitle = view.findViewById(R.id.tvTitle);
tvTitle.setText("Item " + mPosition);
container.setBackgroundResource(mColors.get(mPosition));
}

}

创建 FragmentStateAdapter 类,并在 Activity 中使用:

```java
public class ViewPagerFragmentStateAdapter extends FragmentStateAdapter {
public ViewPagerFragmentStateAdapter(@NonNull FragmentManager fragmentManager) {
super(fragmentManager);
}
@NonNull
@Override
public Fragment getItem(int position) {
return PageFragment.newInstance(colors, position);
}
@Override
public int getItemCount() {
return colors.size();
}
}

2.4 使用notifyDataSetChanged方法

如需在页面内容发生变化时通知适配器,可以按照以下步骤实现。

```java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_add: colors.add(android.R.color.holo_red_light); mAdapter.notifyItemInserted(colors.size() - 1); break; case R.id.action_remove: int last = colors.size() - 1; colors.remove(last); mAdapter.notifyItemRemoved(last); break; } return super.onOptionsItemSelected(item); } ```

3. 注意事项

目前的 ViewPager2 正在 Alpha 阶段,还存在一些潜在问题,建议在正式应用前进行充分测试。

参考

1. [ViewPager2 官方文档](https://developer.android.com/training/viewPager2) 2. [Android 开发博客](https://blog.csdn.net/android/)
你可能感兴趣的文章
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
Nginx 常用配置清单
查看>>
nginx 常用配置记录
查看>>
Nginx 我们必须知道的那些事
查看>>
Nginx 的 proxy_pass 使用简介
查看>>
Nginx 的配置文件中的 keepalive 介绍
查看>>
Nginx 负载均衡与权重配置解析
查看>>
Nginx 负载均衡详解
查看>>
nginx 配置 单页面应用的解决方案
查看>>
nginx 配置https(一)—— 自签名证书
查看>>
nginx 配置~~~本身就是一个静态资源的服务器
查看>>
Nginx 配置解析:从基础到高级应用指南
查看>>
nginx+Tomcat性能监控
查看>>