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);
//四个加入到数组中 Listlist = 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 ListfragmentList; 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(); } }
打完收工。