ViewPage2使用及坑點解決

一.ViewPage2添加新特性:

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


? ? ? *? 垂直方向


? ? ? *? RecyclerView.Adapter取代PagerAdapter


? ? ? *? registerOnPageChangeCallback 取代 addPageChangeListener


? ? ? *? 更高效的notifyDataSetChanged

二.以下案例是使用RecyclerView結合ViewPage2實現(xiàn)上下滑動

1.依賴導入

? ? //ViewPage2

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


? ? //recyclerview


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

2.Activity和Adapter布局設置


? 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;

? ? //定義一個色彩背景數(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設置

? ? ? ? setViewPage2S();

? ? }

? ? /**

? ? * ViewPage2設置

? ? *

? ? * */

? ? private void setViewPage2S() {

? ? ? ? /**

? ? ? ? * 垂直方向屬性

? ? ? ? * 默認是水平方向ORIENTATION_HORIZONTAL,垂直是ORIENTATION_VERTICAL

? ? ? ? *

? ? ? ? * */

? ? ? ? //設置方向

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

? ? ? ? //設置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結合使用出現(xiàn)的坑點及解決方案:

? 1.將build tools更新到3.2.0互订,gradle更新到4.6脖旱,依賴庫統(tǒng)一更新到28.0.0朴皆,這一步非常重要缘薛,否則會導致第二步不能完全轉換成功(如果已經(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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末器仗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子童番,更是在濱河造成了極大的恐慌青灼,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓盲,死亡現(xiàn)場離奇詭異杂拨,居然都是意外死亡悯衬,警方通過查閱死者的電腦和手機策橘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門沛婴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丑婿,你說我怎么就攤上這事羹奉〔◎龋” “怎么了俗孝?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵革骨,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮处窥,結果婚禮上滔驾,老公的妹妹穿的比我還像新娘。我一直安慰自己哆致,他們只是感情好绕德,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摊阀,像睡著了一般耻蛇。 火紅的嫁衣襯著肌膚如雪踪蹬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天臣咖,我揣著相機與錄音跃捣,去河邊找鬼。 笑死夺蛇,一個胖子當著我的面吹牛疚漆,可吹牛的內容都是我干的。 我是一名探鬼主播刁赦,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼娶聘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甚脉?” 一聲冷哼從身側響起丸升,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牺氨,沒想到半個月后发钝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡波闹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年酝豪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片精堕。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孵淘,死狀恐怖,靈堂內的尸體忽然破棺而出歹篓,到底是詐尸還是另有隱情瘫证,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布庄撮,位于F島的核電站背捌,受9級特大地震影響,放射性物質發(fā)生泄漏洞斯。R本人自食惡果不足惜毡庆,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烙如。 院中可真熱鬧么抗,春花似錦、人聲如沸亚铁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徘溢。三九已至吞琐,卻和暖如春捆探,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背站粟。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工黍图, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卒蘸。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像翻默,于是被迫代替她去往敵國和親缸沃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容