nilupeng
2022-07-29 fe4fa5323fc075ca7fdf3d6c8cfd20cb0a7d45f8
app/src/main/java/com/runt/open/mvvm/base/fragments/BaseTabFragment.java
@@ -1,12 +1,12 @@
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;
@@ -16,7 +16,7 @@
 * 带有tablayout fragment封装
 * Created by Administrator on 2021/11/3 0003.
 */
public abstract class BaseTabFragment<B extends ViewBinding,VM extends ViewModel> extends BaseFragment<B,VM> {
public abstract class BaseTabFragment<B extends ViewBinding,VM extends BaseViewModel> extends BaseFragment<B,VM> {
    TabLayout tabLayout;
    FragmentAdapter fragmentAdapter;
@@ -25,28 +25,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();