package com.auto.lyric.base.activities; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.viewbinding.ViewBinding; import androidx.viewpager2.widget.ViewPager2; import com.auto.lyric.base.adapter.FragmentAdapter; import com.auto.lyric.base.fragments.BaseFragment; import com.auto.lyric.base.model.BaseViewModel; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by Administrator on 2021/11/4 0004. */ public abstract class BaseTabActivity extends BaseActivity { TabLayout tabLayout; FragmentAdapter fragmentAdapter; List tabTitles = new ArrayList<>(); ViewPager2 viewPager2; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); fragmentAdapter = new FragmentAdapter(this); fragmentAdapter.setFragments(initFragments()); setTabTitles(initTabTitles()); //设置当前可见Item左右可见page数,次范围内不会被销毁 //禁用预加载 try { viewPager2 = (ViewPager2) binding.getClass().getDeclaredField("viewPager2").get(binding); tabLayout = (TabLayout) binding.getClass().getDeclaredField("tabLayout").get(binding); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } ; viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT); viewPager2.setAdapter(fragmentAdapter); viewPager2.setCurrentItem(0); viewPager2.setUserInputEnabled(false); //true:滑动,false:禁止滑动 new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> tab.setText(tabTitles.get(position))).attach(); } protected abstract List initTabTitles(); protected abstract List initFragments(); protected List getTabTitles(){ return tabTitles; } public FragmentAdapter getFragmentAdapter() { return fragmentAdapter; } public void setTabTitles(List tabTitles) { if(tabTitles == null){ this.tabTitles.clear(); } this.tabTitles = tabTitles; } public void setTabTitles(String[] tabTitles) { if(tabTitles == null){ this.tabTitles.clear(); } setTabTitles(new ArrayList<>(Arrays.asList(tabTitles))); } }