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 androidx.viewpager2.widget.ViewPager2;
|
|
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<F extends BaseFragment> extends FragmentStateAdapter {
|
|
|
/**
|
* Fragment集合
|
*/
|
private final List<Fragment> mFragmentList = new ArrayList<>();
|
/**
|
* Fragment 标题
|
*/
|
private final List<CharSequence> mTitleList = new ArrayList<>();
|
|
private final List<Long> mIds = new ArrayList<>();
|
|
private AtomicLong mAtomicLong = new AtomicLong(0);
|
|
|
/**
|
* 当前显示的Fragment
|
*/
|
private F mShowFragment;
|
|
/**
|
* 当前 ViewPager
|
*/
|
private ViewPager2 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<F> fragmentList){
|
clear();
|
for (int i = 0; i < fragmentList.size(); i++) {
|
addFragment(fragmentList.get(i));
|
}
|
}
|
|
/**
|
* 添加 Fragment
|
*/
|
public BaseVp2FragmentAdapter<F> addFragment(F fragment) {
|
return addFragment(fragment, null);
|
}
|
|
public BaseVp2FragmentAdapter<F> addFragment(Fragment fragment, String title) {
|
if (fragment != null) {
|
mFragmentList.add(fragment);
|
mTitleList.add(title);
|
mIds.add(getAtomicGeneratedId());
|
notifyDataSetChanged();
|
}
|
return this;
|
}
|
/**
|
* 添加指定位置的Fragment
|
*/
|
public BaseVp2FragmentAdapter<F> 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<F> removeFragment(int index) {
|
if (index >= 0 && index < mFragmentList.size()) {
|
mFragmentList.remove(index);
|
mTitleList.remove(index);
|
mIds.remove(index);
|
notifyDataSetChanged();
|
}
|
return this;
|
}
|
|
/**
|
* 删除所有
|
*/
|
public BaseVp2FragmentAdapter<F> 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);
|
}
|
|
/**
|
* 获取某个 Fragment 的索引(没有就返回 -1)
|
*/
|
public int getFragmentIndex(Class<? extends Fragment> clazz) {
|
if (clazz == null) {
|
return -1;
|
}
|
for (int i = 0; i < mFragmentList.size(); i++) {
|
if (clazz.getName().equals(mFragmentList.get(i).getClass().getName())) {
|
return i;
|
}
|
}
|
return -1;
|
}
|
|
/**
|
* 根据 索引 获取某个 Fragment
|
*/
|
public F getFragment(int index) {
|
if (index >= 0 && index < mFragmentList.size()) {
|
return (F) mFragmentList.get(index);
|
}
|
return null;
|
}
|
}
|