viewpage2与Fragment联动


1、先建一个activity,布局如下

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity2">

    <androidx.viewpager2.widget.ViewPager2
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@+id/viewpage">androidx.viewpager2.widget.ViewPager2>

    <include layout="@layout/tabs_bottom"/>

LinearLayout>

tabs的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#e0e0e0e0"
    android:layout_height="50dp">
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/ly1"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_weight="1">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/tabs_image1"
            android:id="@+id/iv1">ImageView>
    LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/ly2"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_weight="1">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/tabs_image2"
            android:id="@+id/iv2">ImageView>
    LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/ly3"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_weight="1">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/tabs_image3"
            android:id="@+id/iv3">ImageView>
    LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/ly4"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_weight="1">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/tabs_image4"
            android:id="@+id/iv4">ImageView>
    LinearLayout>
LinearLayout>

里面用到的selector,用于点击图片后切换图片使用,要建四个,这里只举一个的例子,其他的复制

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_canyin_fs" android:state_selected="true">item>
    <item android:drawable="@drawable/ic_canyin" >item>
selector>

2、新建四个Fragment,就正常建。

3、activity代码

public class MainActivity2 extends AppCompatActivity implements View.OnClickListener {

    ImageView iv1,iv2,iv3,iv4,curIv;

    LinearLayout ly1,ly2,ly3,ly4;

    private String TAG = MainActivity2.class.getSimpleName();

    ViewPager2 viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        iv1 = findViewById(R.id.iv1);
        iv2 = findViewById(R.id.iv2);
        iv3 = findViewById(R.id.iv3);
        iv4 = findViewById(R.id.iv4);

        ly1 = findViewById(R.id.ly1);
        ly2 = findViewById(R.id.ly2);
        ly3 = findViewById(R.id.ly3);
        ly4 = findViewById(R.id.ly4);

        ly1.setOnClickListener(this);
        ly2.setOnClickListener(this);
        ly3.setOnClickListener(this);
        ly4.setOnClickListener(this);

        changeTab(0);

        viewPager = findViewById(R.id.viewpage);

//四个加入到数组中 List
list = new ArrayList<>(); list.add(new BlankFragment1()); list.add(new BlankFragment2()); list.add(new BlankFragment3()); list.add(new BlankFragment4()); //数据适配器 ViewPagerFragmentAdapter viewpageAdapter = new ViewPagerFragmentAdapter(this,list); viewPager.setAdapter(viewpageAdapter);
//viewPage2注册切换监听,与TAB联动 viewPager.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) { super.onPageSelected(position); Log.i(TAG, "onPageSelected: "+position); changeTab(position); } @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); } }); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.ly1: changeTab(0); break; case R.id.ly2: changeTab(1); break; case R.id.ly3: changeTab(2); break; case R.id.ly4: changeTab(3); break; } }
//切换TAB
private void changeTab(int position) { if(curIv!=null) { curIv.setSelected(false); } switch (position) { case 0:curIv = iv1;break; case 1:curIv = iv2;break; case 2:curIv = iv3;break; case 3:curIv = iv4;break; } curIv.setSelected(true); } }

viewPager2数据适配器

public class ViewPagerFragmentAdapter extends FragmentStateAdapter {

    private List fragmentList;

    public ViewPagerFragmentAdapter(@NonNull FragmentActivity fragmentActivity,List fragmentList) {
        super(fragmentActivity);
        this.fragmentList = fragmentList;
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getItemCount() {
        return fragmentList.size();
    }
}

打完收工。