Runt
2022-03-01 cc5e1cbab3de2c497ffb12d4fc49dd331ba20a5c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.auto.lyric.base.fragments;
 
import androidx.lifecycle.ViewModel;
import androidx.viewbinding.ViewBinding;
import androidx.viewpager2.widget.ViewPager2;
 
import com.auto.lyric.base.adapter.FragmentAdapter;
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;
 
/**
 * 带有tablayout fragment封装
 * Created by Administrator on 2021/11/3 0003.
 */
public abstract class BaseTabFragment<B extends ViewBinding,VM extends ViewModel> extends BaseFragment<B,VM> {
 
    TabLayout tabLayout;
    FragmentAdapter fragmentAdapter;
    List<String> tabTitles = new ArrayList<>();
    ViewPager2 viewPager2;
 
    @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);
        } 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<String> initTabTitles();
 
    protected abstract List<BaseFragment> initFragments();
 
    protected List<String> getTabTitles(){
        return tabTitles;
    }
 
    public FragmentAdapter getFragmentAdapter() {
        return fragmentAdapter;
    }
 
    public void setTabTitles(List<String> 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)));
    }
}