Android中ViewPager1和ViewPager2的使用教程
Android X的東西都已經(jīng)使用很久了,都沒(méi)好好記錄一下,
現(xiàn)在記錄一下Android X 下 ViewPager1和ViewPager2的使用,幾乎是每個(gè)項(xiàng)目中都會(huì)使用的控件,他們之間還是有點(diǎn)區(qū)別的,
案例效果圖,ViewPager和ViewPager2

首先ViewPager1和ViewPager2 是在Android X 的appcompat 庫(kù)中,創(chuàng)建項(xiàng)目就有的
xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
首頁(yè)來(lái)看看ViewPager1的Adapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragmentList) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.fragmentList = fragmentList;
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
ViewPager2的Adapter
public class MyFragmentPagerAdapter extends FragmentStateAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(@NonNull @NotNull FragmentActivity fragmentActivity,List<Fragment> fragmentList) {
super(fragmentActivity);
this.fragmentList = fragmentList;
}
@NonNull
@NotNull
@Override
public Fragment createFragment(int i) {
return fragmentList.get(i);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
}
ViewPager加載Fragment
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList);
viewpager.setAdapter(pagerAdapter);
viewpager.setOffscreenPageLimit(fragmentList.size());
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {//滑動(dòng)到第幾個(gè)
navigation.getMenu().getItem(position).setChecked(true);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
ViewPager2加載Fragment
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(this,fragmentList);
viewpager2.setAdapter(pagerAdapter);
viewpager2.setOffscreenPageLimit(fragmentList.size());
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) {//滑動(dòng)到第幾個(gè)
super.onPageSelected(position);
navigation.getMenu().getItem(position).setChecked(true);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});
效果圖是結(jié)合BottomNavigationView+ViewPager一起使用的
上一篇博客講到了BottomNavigationView,可以去看看他的介紹
BottomNavigationView+ViewPager/ViewPager2的綁定都是一樣的
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem menuItem) {
if (menuItem.getItemId() == R.id.menu_mail){
viewpager.setCurrentItem(0);
}else if (menuItem.getItemId() == R.id.menu_bookshelf){
viewpager.setCurrentItem(1);
}else if (menuItem.getItemId() == R.id.menu_my_config){
viewpager.setCurrentItem(2);
}
return false;
}
});
還有一種方式:
navigation.setOnNavigationItemSelectedListener(item -> {
Toast.makeText(ApiDemo1Activity2.this,
"下標(biāo)"+item.getOrder(),Toast.LENGTH_LONG).show();
viewpager.setCurrentItem(item.getOrder());
return true;
});
這個(gè)下標(biāo)如何來(lái)的呢?
那當(dāng)然是BottomNavigationView 綁定的按鈕中設(shè)置的了
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="bottom_navigation_view">
<item
android:id="@+id/menu_mail"
android:icon="@drawable/ic_bottom_mail"
android:title="@string/book_mail"
android:orderInCategory="0"
/>
<item
android:id="@+id/menu_bookshelf"
android:icon="@drawable/ic_bottom_books"
android:orderInCategory="1"
android:title="@string/book_shelf" />
<item
android:id="@+id/menu_my_config"
android:icon="@drawable/ic_bottom_person"
android:orderInCategory="2"
android:title="@string/my" />
</menu>
屬性 android:orderInCategory="0" 來(lái)設(shè)置下標(biāo),這樣就更方便綁定ViewPager了
總結(jié)ViewPager和ViewPager2的區(qū)別
- ViewPager2API最大的變化是它現(xiàn)在使用RecyclerView。
- 使用ViewPager2需要遷移到 AndroidX ,因?yàn)閍ndroid.support庫(kù)中不支持ViewPager2
- FragmentStateAdapter 替換 FragmentStatePagerAdapter
- RecyclerView.Adapter 替代 PagerAdapter
- registerOnPageChangeCallback替換 addPageChangeListener
官方文檔介紹:
ViewPager2 | Android 開(kāi)發(fā)者 | Android Developers
到此這篇關(guān)于Android中ViewPager1和ViewPager2的使用的文章就介紹到這了,更多相關(guān)Android ViewPager1和ViewPager2使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android TouchListener實(shí)現(xiàn)拖拽刪實(shí)例代碼
這篇文章主要介紹了Android TouchListener實(shí)現(xiàn)拖拽刪實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android通過(guò)aapt命令獲取apk詳細(xì)信息(包括:文件包名,版本號(hào),SDK等信息)
本文給大家分享android通過(guò)aapt命令獲取apk詳細(xì)信息(包括:文件包名,版本號(hào),SDK等信息),非常不錯(cuò),簡(jiǎn)單實(shí)用,對(duì)android sdk aapt知識(shí)感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧2016-11-11
android的got表HOOK實(shí)現(xiàn)代碼
對(duì)于android的so文件的hook根據(jù)ELF文件特性分為:Got表hook、Sym表hook和inline hook等。今天通過(guò)本文給大家介紹android HOOK實(shí)現(xiàn)got表的實(shí)例代碼,需要的朋友參考下吧2021-08-08
Android編程之線性布局LinearLayout實(shí)例簡(jiǎn)析
這篇文章主要介紹了Android編程之線性布局LinearLayout用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Android線性布局的使用技巧,需要的朋友可以參考下2016-01-01
Android中使用AndroidTestCase的方法實(shí)例
這篇文章主要介紹了Android中使用AndroidTestCase的方法實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04
Android編程實(shí)現(xiàn)圖片的上傳和下載功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)圖片的上傳和下載功能,涉及Android針對(duì)圖片的字節(jié)流轉(zhuǎn)換與傳輸操作相關(guān)技巧,需要的朋友可以參考下2016-10-10
Android事件分發(fā)之View事件處理關(guān)鍵及示例分析
這篇文章主要為大家介紹了Android事件分發(fā)之View事件處理關(guān)鍵及示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Android編程實(shí)現(xiàn)TextView垂直自動(dòng)滾動(dòng)功能【附demo源碼下載】
這篇文章主要介紹了Android編程實(shí)現(xiàn)TextView垂直自動(dòng)滾動(dòng)功能,詳細(xì)分析了Android TextView垂直自動(dòng)滾動(dòng)功能的實(shí)現(xiàn)步驟與布局、功能相關(guān)技巧,并附帶了demo源碼供讀者下載,需要的朋友可以參考下2017-02-02

