首页 > 学院 > 开发设计 > 正文

ViewPager 和Fragment 的一点点交互心得

2019-11-07 23:58:32
字体:
来源:转载
供稿:网友

这几天在写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(); }

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表