ViewPager 和Fragment 的一点点交互心得

来源:互联网 发布:淘宝金币一键领取源码 编辑:程序博客网 时间:2024/05/16 04:57

这几天在写viewpager 和fragment 的 一个组合,出现在当前页面的时候,setCurrentItem() 的方法没有起到什么作用。
这是因为 ViewPager 的缓存原因,所以只能另辟他径。在 adapger 中用集合来保存每一个 Fragment 的对象,用到的时候直接从中取出来

public class PagerFragmentAdapter extends FragmentStatePagerAdapter {    private FragmentManager fm;    private Map<String,Fragment> mFragments = new HashMap();    private List<String> mStrings = new ArrayList<>();    FragmentView fv;    public PagerFragmentAdapter(FragmentManager fm, List<String> mStrings) {        super(fm);        this.fm = fm;        this.mStrings = mStrings;    }    @Override    public Fragment getItem(int position) {        FragmentView fv = FragmentView.newInstance(mStrings.get(position));        mFragments.put(String.valueOf(position),fv);        return fv;    }    @Override    public int getCount() {        return mStrings.size();    }    /**     * 取出当前显示的Fragment     * @param positon  当前的位置     * @return     */    public Fragment getCurrentFragment(int positon){        return mFragments.get(String.valueOf(positon));    }}

这样在Activity 中就拿到了当前显示的Fragment ,可以直接调用Fragment 中写好的更新方法,更新Fragment 中的数据

int position = mViewPager.getCurrentItem();FragmentView fv =(FragmentView) mPagerFragmentAdapter.getCurrentFragment(positon);fv.xxxx();

这样可以忽略ViewPager 的postion 和选中的position 一致不能即时更新Fragment 中的数据.
也可以判断一下数据

//其他的可以根据这个继续写 if (viewPager.getCurrentItem() == 0) {       //当前页         int position = mViewPager.getCurrentItem();       FragmentView fv = (FragmentView)mPagerFragmentAdapter.getCurrentFragment(positon);       fv.updateView();       //后一页              fv = (FragmentView)mPagerFragmentAdapter.getCurrentFragment(positon+1);       v.updateView();  }

这样就可以都即时刷新数据。

0 0
原创粉丝点击