传递数据beetwen viewpager的片段

时间:2018-03-31 08:33:12

标签: android android-fragments android-viewpager

我想将数据从活动动态传递到viewpager的片段 我试过以下解决方案

Passing data beetwen fragments in viewpager

String tag = "android:switcher:" + R.id.pager + ":" + index;
Fragment f = getSupportFragmentManager().findFragmentByTag(tag);

当我使用ViewPger作为FragmentPagerAdapter时,此代码有效, 我有一个庞大的viewpager项目列表,需要使用FragmentStatePagerAdapter。 使用FragmentStatePagerAdapter将片段对象作为null, 什么是将数据动态传递给viewpager片段的最佳解决方案?

1 个答案:

答案 0 :(得分:0)

列出的代码看起来有点hacky并且可能会在android源代码更改时中断。 我建议你让自定义适配器保存片段列表,并使用getter方法稍后访问它们

    public class CustomAdapter extends FragmentStatePagerAdapter {

       SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
       private List<Fragment> fragmentList;

        public CustomAdapter(FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.fragmentList = fragmentList;}



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


        @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);
        }

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


    }

最后,您可以使用viewpager来获取所需的片段:

Fragment fragment = mViewPagerAdapter.getRegisteredFragment(viewPager.getCurrentItem());