因?yàn)樵趯?shí)際開發(fā)中TabLayout和ViewPager結(jié)合使用較多,所以下面主要是對(duì)這兩者的結(jié)合使用。使用TabLayout不但可以實(shí)現(xiàn)點(diǎn)擊切換Fragment的效果還可以實(shí)現(xiàn)與ViewPager的結(jié)合使用渺氧,以下是 效果圖:布局上方是TabLayout,下方就是ViewPager
TabLayout 使用到的依賴:
implementation 'com.android.support:design:29.1.1'
下面是在Activity中xml的代碼,此處使用到相對(duì)布局(RelativeLayout)
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab"
app:tabMode="scrollable"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp"
android:layout_below="@+id/tab"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
用到的Java代碼:
mTab = (TabLayout) findViewById(R.id.tab);
mVp = (ViewPager) findViewById(R.id.vp);
//設(shè)置Tablayout與ViewPager同步
mTab.setupWithViewPager(mVp);
//這里的TabLayout數(shù)據(jù)較多痰催,用集合存儲(chǔ)
beans = new ArrayList<>();
//定義適配器與綁定
adapter = new TypeAdapter(getSupportFragmentManager(), beans);
mVp.setAdapter(adapter);
ViewPager用到的適配器:
public class Adapter extends FragmentPagerAdapter {
private ArrayList<Bean> list;
public Adapter(@NonNull FragmentManager fm, ArrayList<Bean> list) {
super(fm);
this.list = list;
}
public Adapter(@NonNull FragmentManager fm, int behavior, ArrayList<Bean> list) {
super(fm, behavior);
this.list = list;
}
@NonNull
@Override
public Fragment getItem(int position) {
//每次得到一個(gè)新的下標(biāo)就會(huì)創(chuàng)建新的Fragment
return new HomeFragment();
}
@Override
public int getCount() {
//定義的集合大小
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
//設(shè)置Tablayout的標(biāo)題
return list.get(position).getName();
}
}