ViewPager Fragment

最近,遇到了一个问题。
业务需求是这样,需要三个tab,分别显示三个页面,
1.三个页面分别请求不同的数据。
2.主页面中提供排序功能,点击后刷新三个页面
3.每个Fragment可以单独刷新
而每次请求数据时,不会重新执行Fragment中的代码。因为在FragmentStatePagerAdapter中,会去查询FragmenManager中的Fragment,如果其中存在待查询Fragment的实例,那么就执行实例,而不会重新初始化。
这里采取的方案就是,清理FragmentManager中的实例,这样每次刷新时都会进行初始化。传入相应参数进行相应的操作。由于这里只有三个页面,每次重新初始化,不会有很大的性能损失。
主要的代码在Adapter中,

public class FragmentAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> mFragments;
    private List<String> mTitles;
    private FragmentManager fm;
    private List<String> mTagList = new ArrayList<>();
    private boolean[] fragmentsUpdateFlag = { false, false, false, false };

    public FragmentAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titles) {
        super(fm);
        this.fm = fm;
        mFragments = fragments;
        mTitles = titles;
    }

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

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
        //POSITION_NONE 表示item不显示了
        //POSITION_UNCHANGED 表示item的位置没有改变,默认返回
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return mTitles.get(position);
    }

    public void updateData(List<Fragment> fragments){
        setFragments(fragments);
    }

    //设置载入的Fragment
    private void setFragments(List<Fragment> mFragments){
        if (this.mFragments != null){
            //清理Fragment中的缓存
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            for (Fragment f : this.mFragments){
                fragmentTransaction.remove(f);
            }
            fragmentTransaction.commit();
            fm.executePendingTransactions();
        }
        this.mFragments = mFragments;
        notifyDataSetChanged();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容