ViewPage2使用及坑點(diǎn)解決

一.ViewPage2添加新特性:

? ? ? *? 從右到左的布局支持


? ? ? *? 垂直方向


? ? ? *? RecyclerView.Adapter取代PagerAdapter


? ? ? *? registerOnPageChangeCallback 取代 addPageChangeListener


? ? ? *? 更高效的notifyDataSetChanged

二.以下案例是使用RecyclerView結(jié)合ViewPage2實(shí)現(xiàn)上下滑動(dòng)

1.依賴導(dǎo)入

? ? //ViewPage2

? ? implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01'


? ? //recyclerview


? ? implementation 'androidx.recyclerview:recyclerview:1.0.0-beta01'

2.Activity和Adapter布局設(shè)置


? 1>.Activity布局


? ? ? <?xml version="1.0" encoding="utf-8"?>

? ? ? <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

? ? ? ? xmlns:app="http://schemas.android.com/apk/res-auto"

? ? ? ? xmlns:tools="http://schemas.android.com/tools"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="match_parent"

? ? ? ? tools:context=".MainActivity">


? ? ? ? ? <androidx.viewpager2.widget.ViewPager2

? ? ? ? ? ? android:id="@+id/viewpager2"

? ? ? ? ? ? android:layout_width="match_parent"

? ? ? ? ? ? android:layout_height="match_parent"/>

? ? ? ? </androidx.constraintlayout.widget.ConstraintLayout>

? 2>.recycleview_item.xml適配器布局


? ? ? <?xml version="1.0" encoding="utf-8"?>

? ? ? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

? ? ? ? xmlns:tools="http://schemas.android.com/tools"

? ? ? ? android:id="@+id/container"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="match_parent">


? ? ? ? //原生控件

? ? ? ? <androidx.appcompat.widget.AppCompatTextView

? ? ? ? ? android:id="@+id/tvTitle"

? ? ? ? ? android:layout_width="wrap_content"

? ? ? ? ? android:layout_height="wrap_content"

? ? ? ? ? android:layout_centerInParent="true"

? ? ? ? ? android:textColor="@android:color/white"

? ? ? ? ? android:textSize="32sp"

? ? ? ? ? tools:text="item" />


? ? ? </RelativeLayout>

3.ViewPage2的適配器

? ? package com.wd.viewpage2demo;

? ? import android.content.Context;

? ? import androidx.annotation.NonNull;

? ? import androidx.recyclerview.widget.RecyclerView;

? ? import android.view.LayoutInflater;

? ? import android.view.View;

? ? import android.view.ViewGroup;

? ? import android.widget.RelativeLayout;

? ? import android.widget.TextView;

? ? import java.util.List;

? ? import androidx.viewpager2.widget.ViewPager2;

? /**

? * Author : 張自力

? * Created on time.

? *

? * ViewPage2的適配器

? *

? */


? public class ViewPagerAdapter extends RecyclerView.Adapter<ViewPagerAdapter.ViewHolder> {

? ? private List<String> mData;

? ? private LayoutInflater mInflater;

? ? private ViewPager2 viewPager2;

? ? //定義一個(gè)色彩背景數(shù)組

? ? private int[] colorArray = new int[]{android.R.color.black, android.R.color.holo_blue_dark,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.R.color.holo_green_dark, android.R.color.holo_red_dark};

? ? public ViewPagerAdapter(Context context, List<String> data, ViewPager2 viewPager2) {

? ? ? ? this.mInflater = LayoutInflater.from(context);

? ? ? ? this.mData = data;

? ? ? ? this.viewPager2 = viewPager2;

? ? }

? ? @NonNull

? ? @Override

? ? public ViewPagerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

? ? ? ? View view = mInflater.inflate(R.layout.recycleview_item, parent, false);

? ? ? ? return new ViewHolder(view);

? ? }

? ? @Override

? ? public void onBindViewHolder(@NonNull ViewPagerAdapter.ViewHolder holder, int position) {

? ? ? ? String animal = mData.get(position);

? ? ? ? holder.myTextView.setText(animal);

? ? ? ? holder.relativeLayout.setBackgroundResource(colorArray[position]);

? ? }

? ? @Override

? ? public int getItemCount() {

? ? ? ? return mData.size();

? ? }

? ? public static class ViewHolder extends RecyclerView.ViewHolder {

? ? ? ? TextView myTextView;

? ? ? ? RelativeLayout relativeLayout;

? ? ? ? ViewHolder(View itemView) {

? ? ? ? ? ? super(itemView);

? ? ? ? ? ? myTextView = itemView.findViewById(R.id.tvTitle);

? ? ? ? ? ? relativeLayout = itemView.findViewById(R.id.container);

? ? ? ? ? }

? ? ? }

? ? }

4.Activity界面編寫

? ? package com.wd.viewpage2demo;

? ? import android.os.Bundle;

? ? import androidx.appcompat.app.AppCompatActivity;

? ? import java.util.ArrayList;

? ? import java.util.List;

? ? import androidx.viewpager2.widget.ViewPager2;


? ? public class MainActivity extends AppCompatActivity {

? ? private ViewPager2 viewpager2;

? ? private List<String> list;

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ? //初始化控件

? ? ? ? initView();

? ? ? ? //初始化數(shù)據(jù)

? ? ? ? initDatas();

? ? ? ? //ViewPage2設(shè)置

? ? ? ? setViewPage2S();

? ? }

? ? /**

? ? * ViewPage2設(shè)置

? ? *

? ? * */

? ? private void setViewPage2S() {

? ? ? ? /**

? ? ? ? * 垂直方向?qū)傩?/p>

? ? ? ? * 默認(rèn)是水平方向ORIENTATION_HORIZONTAL,垂直是ORIENTATION_VERTICAL

? ? ? ? *

? ? ? ? * */

? ? ? ? //設(shè)置方向

? ? ? ? viewpager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);

? ? ? ? //設(shè)置adapter

? ? ? ? viewpager2.setAdapter(new ViewPagerAdapter(this, list, viewpager2));

? ? ? ? viewpager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

? ? ? ? ? ? ? ? super.onPageScrolled(position, positionOffset, positionOffsetPixels);

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onPageSelected(int position) {

? ? ? ? ? ? ? ? super.onPageSelected(position);

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onPageScrollStateChanged(int state) {

? ? ? ? ? ? ? ? super.onPageScrollStateChanged(state);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? /**

? ? * 初始化數(shù)據(jù)

? ? *

? ? * */

? ? private void initDatas() {

? ? ? ? list = new ArrayList<>();

? ? ? ? list.add("頁面一");

? ? ? ? list.add("頁面二");

? ? ? ? list.add("頁面三");

? ? ? ? list.add("頁面四");

? ? }

? ? /**

? ? * 初始化控件

? ? *

? ? * */

? ? private void initView() {

? ? ? ? //初始化ViewPage2

? ? ? ? viewpager2 = (ViewPager2) findViewById(R.id.viewpager2);

? ? }

}

三.RecyclerView和ViewPage2結(jié)合使用出現(xiàn)的坑點(diǎn)及解決方案:

? 1.將build tools更新到3.2.0,gradle更新到4.6,依賴庫統(tǒng)一更新到28.0.0,這一步非常重要,否則會(huì)導(dǎo)致第二步不能完全轉(zhuǎn)換成功(如果已經(jīng)更新過了,可以忽略這一步)

? 2.選擇工程右鍵→Refactor→Migrate to Androidx:


? https://img-blog.csdnimg.cn/20190311164212477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc5NzA0OA==,size_16,color_FFFFFF,t_70


? 3.選中所有需要重命名的目錄,執(zhí)行Do Refactor:


? https://img-blog.csdnimg.cn/2019031116422580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc5NzA0OA==,size_16,color_FFFFFF,t_70

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容