从FragmentPagerAdapter动态添加和删除片段

dor*_*ora 5 android android-viewpager fragmentpageradapter commonsware-cwac

我有一个用于viewPager的FragmentPagerAdapter,它最初只有一个Fragment.我想在用户从右向左滑动时动态地向适配器添加一个新的Fragment,并在用户从左向右滑动时动态删除Fragment.我试图使用这个库https://github.com/commonsguy/cwac -pager但是在该库中我们可以选择在按钮点击上添加和删除片段.我试图将一个OnPageChangeListener添加到viewpager,但回调方法(onPageScrolled和onPageScrollStateChanged)被多次调用,这导致向FragmentPagerAdapter添加了多个片段.所以请详细说明如何做到这一点.

Adi*_*tya 9

@dora:我认为在你的情况下FragmentStatePagerAdapter会帮助你.根据我的理解,我已经在下面提到了它的使用.我希望它能帮助你做出决定.

有两种方法可以实现ViewPager:•FragmentStatePagerAdapter•FragmentPagerAdapter

FragmentStatePagerAdapter类消耗较少的内存,因为它只有在用户看不到片段时才会销毁片段,只保留该片段的已保存状态

FragmentPagerAdapter: 当片段数量较少时.但是,对于大量碎片使用AndroidFragmentPagerAdapter会导致不稳定且滞后的用户体验.

viewPager的页面保留数量? 任何ViewPager将保留的项目数由setOffscreenPageLimit()方法设置.屏幕外页面限制的默认值为3.这意味着ViewPager将跟踪当前可见的页面,一个位于左侧,另一个位于右侧.跟踪页面的数量始终以当前可见页面为中心.

请点击此链接获取代码:http://www.truiton.com/2013/05/android-fragmentpageradapter-example/


SUP*_*LEX 5

我知道这篇文章很老了,但是我很难想出来,所以无论如何我都会回答它.

你想使用FragmentStatePagerAdapter和覆盖getItemPosition().创建一个你要传递给片段,调用的东西的列表notifyDataSetChanged(),然后你就完成了!

这是适配器:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

        List<String> mKeyList = new ArrayList<>();

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

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(mKeyList.get(position));
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            return "SCOUT " + (getCount() - position);
        }

        public void add(int position, String key) {
            mKeyList.add(position, key);
            notifyDataSetChanged();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是片段:

public static class PlaceholderFragment extends Fragment {

        private static final String ARG_SCOUT_KEY = "scout_key";

        public static PlaceholderFragment newInstance(String key) {

            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putString(ARG_SCOUT_KEY, key);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.current_scout_fragment, container, false);

            //getArguments().getString(ARG_SCOUT_KEY));

            return rootView;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Com*_*are 2

我想在用户从右向左滑动时动态向适配器添加一个新的片段,并在用户从左向右滑动时动态删除删除片段。

AFAIK,任何PagerAdadpter. 肯定不会支持的ArrayPagerAdapter。该页面需要存在,否则无法滑动到该页面。您不能先滑动,然后再添加页面。

此外,我从未发现您提出的模式的用例无法通过将页面放在适配器中但不填充页面来处理(即,您似乎试图避免的任何昂贵的工作),直到滑动开始。