为了账号安全,请及时绑定邮箱和手机立即绑定

从ViewPager检索片段

从ViewPager检索片段

幕布斯6054654 2019-06-03 17:05:23
从ViewPager检索片段我用的是ViewPager连同一个FragmentStatePagerAdapter承载三个不同的片段:[碎片1][碎片2][碎片3]当我想Fragment1从ViewPager在FragmentActivity.有什么问题,我该如何解决?
查看完整描述

4 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

主要答案依赖于框架生成的名称。如果这种情况发生变化,那么它将不再起作用。

那么这个解决方案呢,覆盖instantiateItem()destroyItem()你的Fragment(State)PagerAdapter:

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

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

    @Override
    public Fragment getItem(int position) {
        return MyFragment.newInstance(...); 
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }}

在处理可用的片段时,这似乎适用于我。尚未实例化的片段,则在调用getRegisteredFragment..但我一直在用这个来获取电流Fragment走出ViewPageradapater.getRegisteredFragment(viewPager.getCurrentItem())这个再也不会回来了null.

我不知道这个解决方案的其他缺点。如果有,我想知道。


查看完整回答
反对 回复 2019-06-03
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

另一个简单的解决方案是:

    public class MyPagerAdapter extends FragmentPagerAdapter {
        private Fragment mCurrentFragment;

        public Fragment getCurrentFragment() {
            return mCurrentFragment;
        }//...    
        @Override
        public void setPrimaryItem(ViewGroup container, int position, Object object) {
            if (getCurrentFragment() != object) {
                mCurrentFragment = ((Fragment) object);
            }
            super.setPrimaryItem(container, position, object);
        }
    }


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 515 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信