
ViewPager2是在2019年Google I/O大會(huì)推出的用來(lái)替代ViewPager的,它包含了一些新的特性以及增強(qiáng)了UI和代碼的體驗(yàn)。
API的變動(dòng):
。目前還只是推出了第一個(gè)預(yù)覽版,我們可以直接引入來(lái)使用了:
? implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'
我們先來(lái)看看有哪些功能和使用上的變化:
新功能:
支持RTL布局
支持豎向滾動(dòng)
完整支持notifyDataSetChanged
FragmentStateAdapter替換了原來(lái)的?FragmentStatePagerAdapter
RecyclerView.Adapter替換了原來(lái)的?PagerAdapter
registerOnPageChangeCallback替換了原來(lái)的?addPageChangeListener
讓我們來(lái)看看如何使用吧
導(dǎo)入依賴(lài)的庫(kù)這里會(huì)多出一個(gè)庫(kù) 用來(lái)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();
? ? }
}
最后我附上代碼? ? 具體的看代碼吧??