之前的项目中使用过ViewPager,被坑过几次。如果你在RecyclerView中的Item使用ViewPager,你绝对会产生莫名其妙的问题,因为ViewPager在同一界面上不能有两个一样的ID,否则会导致滑动和内存问题。
(1)最简单的使用
ViewPager2是内部使用了RecyclerView,最简单用法就是设置一个Adapter即可马上使用,下面的ViewPager2默认是横向滚动:
ViewPager2 uiVisitorPager2 = mRootView.findViewById(R.id.uiVisitorPager2); uiVisitorPager2.setAdapter(new RecyclerView.Adapter() { @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View item = View.inflate(parent.getContext(), R.layout.face_item_domicile, null); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); item.setLayoutParams(lp); RecyclerView.ViewHolder vh = new RecyclerView.ViewHolder(item){}; return vh; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { } @Override public int getItemCount() { return 10; } });
注意到上面的手动设置LayoutParams,否则会抛出:
java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
(2)垂直滚动的特性
ViewPager2支持横向和垂直滚动,只需要在xml中通过android:orientation指定方向:
<androidx.viewpager.widget.ViewPager android:id="@+id/uiVisitorPager" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="1dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/uiTopTitle">