108 lines
2.9 KiB
Java
108 lines
2.9 KiB
Java
|
|
package com.xscm.moduleutil.adapter;
|
|||
|
|
|
|||
|
|
import androidx.annotation.NonNull;
|
|||
|
|
import androidx.fragment.app.Fragment;
|
|||
|
|
import androidx.fragment.app.FragmentManager;
|
|||
|
|
import androidx.fragment.app.FragmentPagerAdapter;
|
|||
|
|
|
|||
|
|
import java.util.ArrayList;
|
|||
|
|
import java.util.List;
|
|||
|
|
/**
|
|||
|
|
*@author qx
|
|||
|
|
*@data 2025/6/9
|
|||
|
|
*@description:可动态添加和删除的viewPage适配器
|
|||
|
|
*/
|
|||
|
|
public class CommonPageAdapter extends FragmentPagerAdapter {
|
|||
|
|
|
|||
|
|
private List<Fragment> mFragmentList = new ArrayList<>();
|
|||
|
|
private List<Integer> mItemIdList = new ArrayList<>();
|
|||
|
|
private int id = 0;
|
|||
|
|
private FragmentManager mFm;
|
|||
|
|
|
|||
|
|
public CommonPageAdapter(FragmentManager fm, @NonNull List<Fragment> fragmentList) {
|
|||
|
|
super(fm);
|
|||
|
|
this.mFm = fm;
|
|||
|
|
for (Fragment fragment : fragmentList) {
|
|||
|
|
this.mFragmentList.add(fragment);
|
|||
|
|
mItemIdList.add(id++);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public CommonPageAdapter(FragmentManager fm) {
|
|||
|
|
super(fm);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public List<Fragment> getFragmentList() {
|
|||
|
|
return mFragmentList;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void addPage(int index, Fragment fragment) {
|
|||
|
|
mFragmentList.add(index, fragment);
|
|||
|
|
mItemIdList.add(index, id++);
|
|||
|
|
notifyDataSetChanged();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void addPage(Fragment fragment) {
|
|||
|
|
mFragmentList.add(fragment);
|
|||
|
|
mItemIdList.add(id++);
|
|||
|
|
notifyDataSetChanged();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void delPage(int index) {
|
|||
|
|
mFragmentList.remove(index);
|
|||
|
|
mItemIdList.remove(index);
|
|||
|
|
notifyDataSetChanged();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void updatePage(List<Fragment> fragmentList) {
|
|||
|
|
mFragmentList.clear();
|
|||
|
|
mItemIdList.clear();
|
|||
|
|
|
|||
|
|
for (int i = 0; i < fragmentList.size(); i++) {
|
|||
|
|
mFragmentList.add(fragmentList.get(i));
|
|||
|
|
mItemIdList.add(id++);//注意这里是id++,不是i++。
|
|||
|
|
}
|
|||
|
|
notifyDataSetChanged();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public Fragment getItem(int position) {
|
|||
|
|
return mFragmentList.get(position);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public int getCount() {
|
|||
|
|
return mFragmentList.size();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 返回值有三种,
|
|||
|
|
* POSITION_UNCHANGED 默认值,位置没有改变
|
|||
|
|
* POSITION_NONE item已经不存在
|
|||
|
|
* position item新的位置
|
|||
|
|
* 当position发生改变时这个方法应该返回改变后的位置,以便页面刷新。
|
|||
|
|
*/
|
|||
|
|
@Override
|
|||
|
|
public int getItemPosition(Object object) {
|
|||
|
|
if (object instanceof Fragment) {
|
|||
|
|
|
|||
|
|
if (mFragmentList.contains(object)) {
|
|||
|
|
return mFragmentList.indexOf(object);
|
|||
|
|
} else {
|
|||
|
|
return POSITION_NONE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return super.getItemPosition(object);
|
|||
|
|
}
|
|||
|
|
public void updateFragments(List<Fragment> newFragments) {
|
|||
|
|
this.mFragmentList.clear();
|
|||
|
|
this.mFragmentList.addAll(newFragments);
|
|||
|
|
notifyDataSetChanged();
|
|||
|
|
}
|
|||
|
|
@Override
|
|||
|
|
public long getItemId(int position) {
|
|||
|
|
return mItemIdList.get(position);
|
|||
|
|
}
|
|||
|
|
}
|