美文网首页
ViewPager Fragment

ViewPager Fragment

作者: adrecen | 来源:发表于2016-10-29 23:29 被阅读26次

最近,遇到了一个问题。
业务需求是这样,需要三个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();
    }
}

相关文章

网友评论

      本文标题:ViewPager Fragment

      本文链接:https://www.haomeiwen.com/subject/mlmyuttx.html