安卓APP_ 布局(8) —— 基于 RecyclerView 的 ViewPager2翻页
摘自:安卓APP_ 布局(8) —— 基于 RecyclerView 的 ViewPager2翻頁
作者:丶PURSUING
發布時間: 2021-04-20 15:37:54
網址:https://blog.csdn.net/weixin_44742824/article/details/115803077
viewpager2 是對RecyclerView 的封裝(所以viewpager2 自帶懶加載方案),相對于viewpager,在實際項目中,更推薦使用viewpager2 。
實現效果
目前來說跟viewpager一毛一樣
(1)創建viewpager2
在activity_main.xml中,更改為LinearLayout布局,再創建viewpager2布局。
如果找不到viewpager2,則需要添加依賴:
(2)構建viewPage2專屬adapter
viewPage的顯示需要適配別的數據,相當于一個容器,在容器中顯示什么數據需要用戶在使用的時候去適配。
在下圖中,先是通過find創建viewPage2對象,然后用.setAdapter設置適配器。
Adapter類實例化了一個對象,并把這個對象作為適配器設置的傳入參數,如下圖:
接下來就是要定義一個Adapter類,這個類專門用于適配viewPage2
這個Adapter類要繼承于RecyclerView.Adapter,并實現其里面的全部方法:(alt+enter選擇繼承)
實現如下圖的方法:
(3)定義要適配的界面
創建一個新的布局
如下圖:
當前UI框架如下圖:
其實現在ViewPager已經實現了左滑右滑,只是要對Adapter進行操作。
定義一個內部類去封裝RecyclerView.ViewHolder返回的數據,這個內部類為ViewPagerViewHolder,將要替換RecyclerView.ViewHolder
傳入泛型
按住ctrl點進Adapter看看,發現是拓展自ViewHolder的一個泛型,就是傳入的參數要是ViewHolder的一個泛型。
正是上面創建的內部類ViewPagerViewHolder。更改為傳入泛型后,報錯了,更改掉即可。
至此,adpter雛形就完成了。
(4)解析界面
解析要適配的xml
再解析xml里面的具體內容,分別是Layout和Textview.
(5)綁定不同的頁面數據實現左右切換
綁定內容
實現綁定
數據怎么變化,未來可以使用架構MVP,MVM,MVC,這些架構有專門傳遞數據的值。
具體細節在代碼中體現
MainActivity.java
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//為名為viewPage2的布局實例化一個對象ViewPager2 viewPager2 = findViewById(R.id.viewPage2);//實例化一個Adapter對象ViewPager2Adapter viewPager2Adapter = new ViewPager2Adapter();//設置名為viewPage2的布局的AdapterviewPager2.setAdapter(viewPager2Adapter);} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.viewpager2.widget.ViewPager2android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/viewPage2"android:background="#ffff00"/></LinearLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
item_pager.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/container"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tvTitle"android:layout_centerInParent="true"android:textColor="#ff4532"android:textSize="40dp"android:text="hello"/></RelativeLayout>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
item_pager.xml
/*為什么ViewPagerAdapter繼承的會是RecyclerView.Adapter呢?因為點進類ViewPager2發現其實就是對RecyclerView的適配,有很多RecyclerView的影子*/ public class ViewPager2Adapter extends RecyclerView.Adapter <ViewPager2Adapter.ViewPagerViewHolder>{private List<String> titles = new ArrayList<>();private List<Integer> colors = new ArrayList<>();//構造方法:適配頁面的數據(在viewPage初始化的時候就要初始化ArrayList)public ViewPager2Adapter(){titles.add("chen");titles.add("li");titles.add("chen");titles.add("mei");titles.add("wo");titles.add("shuai");colors.add(R.color.white);colors.add(R.color.teal_700);colors.add(R.color.teal_200);colors.add(R.color.purple_700);colors.add(R.color.purple_500);colors.add(R.color.purple_200);}@NonNull@Override//這個方法返回的是類 ViewPagerViewHolder 所對應的一個對象,必須是一個java代碼//怎樣創建一個view呢:解析xml。public ViewPagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//解析xml 這個view來自哪里呢?用下面的解析器進行解析return new ViewPagerViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pager,parent,false));}@Override//綁定不同的頁面數據,適配不同的內容,讓item_pager.xml的數據動態變化 position可以標識itempublic void onBindViewHolder(@NonNull ViewPagerViewHolder holder, int position) {holder.mTv.setText(titles.get(position));//R.color.white傳送的是資源id,所以要用setBackgroundResource,而不是setBackgroundColorholder.mContainer.setBackgroundResource(colors.get(position));}@Override//滾動的頁面數量public int getItemCount() {//多出實際值程序閃退return 6;}//定義一個內部類去封裝RecyclerView.ViewHolder返回的數據class ViewPagerViewHolder extends RecyclerView.ViewHolder{//這個ViewPagerViewHolder正是用于解析item_pager.xml的TextView mTv;RelativeLayout mContainer;//實現構造函數public ViewPagerViewHolder(@NonNull View itemView) {super(itemView);//解析id為container的item_pager.xml根布局:RelativeLayoutmContainer = itemView.findViewById(R.id.container);//解析item_pager.xml下的TextViewmTv = itemView.findViewById(R.id.tvTitle);}} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
總結
以上是生活随笔為你收集整理的安卓APP_ 布局(8) —— 基于 RecyclerView 的 ViewPager2翻页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法图解-----十种常用算法
- 下一篇: Plist文件和字典转模型