Android-FragmentPagerAdapter刷新无效的解决方案,快来收藏

private SparseArray mFragmentPositionMap;

private SparseArray mFragmentPositionMapAfterUpdate;

public BaseFragmentPagerAdapter(FragmentManager fm, List fragments) {

super(fm);

mFragmentList = fragments;

mFragmentManager = fm;

mFragmentList = fragments;

mFragmentPositionMap = new SparseArray<>();

mFragmentPositionMapAfterUpdate = new SparseArray<>();

setFragmentPositionMap();

setFragmentPositionMapForUpdate();

}

/**

  • 保存更新之前的位置信息,用<hashCode, position>的键值对结构来保存

*/

private void setFragmentPositionMap() {

mFragmentPositionMap.clear();

for (int i = 0; i < mFragmentList.size(); i++) {

mFragmentPositionMap.put(Long.valueOf(getItemId(i)).intValue(), String.valueOf(i));

}

}

/**

  • 保存更新之后的位置信息,用<hashCode, position>的键值对结构来保存

*/

private void setFragmentPositionMapForUpdate() {

mFragmentPositionMapAfterUpdate.clear();

for (int i = 0; i < mFragmentList.size(); i++) {

mFragmentPositionMapAfterUpdate.put(Long.valueOf(getItemId(i)).intValue(), String.valueOf(i));

}

}

/**

  • 在此方法中找到需要更新的位置返回POSITION_NONE,否则返回POSITION_UNCHANGED即可

*/

@Override

public int getItemPosition(Object object) {

int hashCode = object.hashCode();

//查找object在更新后的列表中的位置

String position = mFragmentPositionMapAfterUpdate.get(hashCode);

//更新后的列表中不存在该object的位置了

if (position == null) {

return POSITION_NONE;

} else {

//如果更新后的列表中存在该object的位置, 查找该object之前的位置并判断位置是否发生了变化

int size = mFragmentPositionMap.size();

for (int i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值