viewpager替换fragment时出现布局重用、数据不刷新等问题

/**
 * Created by admin on 2016/12/5.
 * 针对vpg改变fragments的数量后刷新是没用的问题
 */
public class SpotAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> fragments;

    public SpotAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    // TODO: 2020/3/31 主要就下面2个,hashCode的唯一性保证中途替换新的fragment不会复用之前的旧布局
    @Override
    public long getItemId(int position) {
        return fragments.get(position).hashCode();
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

替换的时候更新数据

/**
     * 中途改变list<Fragment>本来就挺无奈的,但难免会遇到这种要求
     * @param list_bean 新的列表
     */
    private void updateVpgData(List<CourseTeacherListBean.DataBean> list_bean) {
        //新列表数量比之前的多,在之前的基础上加
        if (list_bean.size() > list_frag.size()) {
            for (int i = list_frag.size(); i < list_bean.size(); i++) {
                CourseListFrag courseListFrag = new CourseListFrag();
                list_frag.add(courseListFrag);
            }
        } else if (list_bean.size() < list_frag.size()) {
            ArrayList<Fragment> list = new ArrayList<>();
            for (int i = list_bean.size(); i < list_frag.size(); i++) {
                list.add(list_frag.get(i));
            }
            list_frag.removeAll(list);
        }
        vpgFAdapter.notifyDataSetChanged();
        vpg.setCurrentItem(0);//跳到第几页随意,被越位就行
//        重新更新一遍数据
        for (int i = 0; i < list_frag.size(); i++) {
            CourseListFrag courseListFrag = (CourseListFrag) list_frag.get(i);
            courseListFrag.init(typeString, String.valueOf(list_bean.get(i).getId()));
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容