package com.android.app_base.base.adapter; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.lifecycle.Lifecycle; import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.adapter.FragmentStateAdapter; import com.android.app_base.base.view.BaseFragment; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; /** * @author Ljj * @date 2023.03.15. 14:36 * @desc */ public class BaseVp2FragmentAdapter extends FragmentStateAdapter { /** * Fragment集合 */ private final List mFragmentList = new ArrayList<>(); /** * Fragment 标题 */ private final List mTitleList = new ArrayList<>(); private final List mIds = new ArrayList<>(); private AtomicLong mAtomicLong = new AtomicLong(0); /** * 当前显示的Fragment */ private F mShowFragment; /** * 当前 ViewPager */ private ViewPager mViewPager; public BaseVp2FragmentAdapter(@NonNull FragmentActivity fragmentActivity) { super(fragmentActivity); } public BaseVp2FragmentAdapter(@NonNull Fragment fragment) { super(fragment); } public BaseVp2FragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) { super(fragmentManager, lifecycle); } @NonNull @Override public Fragment createFragment(int position) { return mFragmentList.get(position); } @Override public int getItemCount() { return mFragmentList.size(); } @Override public boolean containsItem(long itemId) { return mIds.contains(itemId); } @Override public long getItemId(int position) { return mIds.get(position); } public void setFragment(List fragmentList){ clear(); for (int i = 0; i < fragmentList.size(); i++) { addFragment(fragmentList.get(i)); } } /** * 添加 Fragment */ public BaseVp2FragmentAdapter addFragment(F fragment) { return addFragment(fragment, null); } public BaseVp2FragmentAdapter addFragment(Fragment fragment, String title) { if (fragment != null) { mFragmentList.add(fragment); mTitleList.add(title); mIds.add(getAtomicGeneratedId()); notifyDataSetChanged(); } return this; } /** * 添加指定位置的Fragment */ public BaseVp2FragmentAdapter addFragment(int index, Fragment fragment, String title) { if (fragment != null && index >= 0 && index <= mFragmentList.size()) { mFragmentList.add(index, fragment); mTitleList.add(index, title); mIds.add(index, getAtomicGeneratedId()); notifyDataSetChanged(); } return this; } /** * 删除 */ public BaseVp2FragmentAdapter removeFragment(int index) { if (index >= 0 && index < mFragmentList.size()) { mFragmentList.remove(index); mTitleList.remove(index); mIds.remove(index); notifyDataSetChanged(); } return this; } /** * 删除所有 */ public BaseVp2FragmentAdapter removeFragmentAll() { mFragmentList.clear(); mTitleList.clear(); mIds.clear(); notifyDataSetChanged(); return this; } private long getAtomicGeneratedId() { return mAtomicLong.incrementAndGet(); } public void clear() { mFragmentList.clear(); mTitleList.clear(); mIds.clear(); notifyDataSetChanged(); } public CharSequence getPageTitle(int position) { return mTitleList.get(position); } }