Runt
2022-08-13 b3a51f064c4dfb27f54cd9526803338d2e8dc296
app/src/main/java/com/runt/open/mvvm/base/fragments/BaseTabFragment.java
@@ -1,22 +1,25 @@
package com.runt.open.mvvm.base.fragments;
import androidx.lifecycle.ViewModel;
import androidx.viewbinding.ViewBinding;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import com.runt.open.mvvm.base.adapter.FragmentAdapter;
import com.runt.open.mvvm.base.model.BaseViewModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * 带有tablayout fragment封装
 * 带有tablayout fragment封装(带有viewpager的视图父类)
 * 继承此类,有效优化代码13行
 * 项目中有过多含有viewpager的fragment可调用,其他情况下不建议使用,优化代码量不佳
 * Created by Administrator on 2021/11/3 0003.
 */
public abstract class BaseTabFragment<B extends ViewBinding,VM extends ViewModel> extends BaseFragment<B,VM> {
@Deprecated
public abstract class BaseTabFragment<B extends ViewBinding,VM extends BaseViewModel> extends BaseFragment<B,VM> {
    TabLayout tabLayout;
    FragmentAdapter fragmentAdapter;
@@ -25,28 +28,30 @@
    @Override
    public void initViews() {
        fragmentAdapter = new FragmentAdapter(activity);
        fragmentAdapter.setFragments(initFragments());
        setTabTitles(initTabTitles());
        //设置当前可见Item左右可见page数,次范围内不会被销毁
        //禁用预加载
        try {
            viewPager2 = (ViewPager2) binding.getClass().getDeclaredField("viewPager2").get(binding);
            tabLayout = (TabLayout) binding.getClass().getDeclaredField("tabLayout").get(binding);
            viewPager2 = (ViewPager2) mBinding.getClass().getDeclaredField("viewPager2").get(mBinding);
            tabLayout = (TabLayout) mBinding.getClass().getDeclaredField("tabLayout").get(mBinding);
        } 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();
    }
    @Override
    public void loadData() {
        fragmentAdapter = new FragmentAdapter(mActivity);
        fragmentAdapter.setFragments(initFragments());
        viewPager2.setAdapter(fragmentAdapter);
    }
    protected abstract List<String> initTabTitles();
    protected abstract List<BaseFragment> initFragments();