ViewPager2是在2019年Google I/O大会推出的用来替代ViewPager的,它包含了一些新的特性以及增强了UI和代码的体验。
API的变动:
。目前还只是推出了第一个预览版,我们可以直接引入来使用了:
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'
我们先来看看有哪些功能和使用上的变化:
新功能:
支持RTL布局
支持竖向滚动
完整支持notifyDataSetChanged
FragmentStateAdapter替换了原来的 FragmentStatePagerAdapter
RecyclerView.Adapter替换了原来的 PagerAdapter
registerOnPageChangeCallback替换了原来的 addPageChangeListener
让我们来看看如何使用吧
导入依赖的库这里会多出一个库 用来TabLayout和ViewPager的绑定
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'
implementation 'com.google.android.material:material:1.1.0-alpha08'
先看布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="240dp"/>
</LinearLayout>
Activity中的
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager2 viewpager;
private List<String> evenList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout=findViewById(R.id.tabLayout);
viewpager=findViewById(R.id.viewpager);
evenList.add("0");
evenList.add("1");
evenList.add("2");
// 正常的用法
viewpager.setAdapter(new MainAdapter(MainActivity.this,evenList));
// TabLayout和ViewPager的绑定
TabLayoutMediator tabLayoutMediator= new TabLayoutMediator(tabLayout, viewpager, new TabLayoutMediator.OnConfigureTabCallback() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText("Tab"+position);
}
});
tabLayoutMediator.attach();
}
}
最后我附上代码 具体的看代码吧