• FragmentStatePagerAdapter的使用


    1、两点

    getItemPosition的覆写使notifyDataSetChanged();会根据数据源的变动更新,不过是全部重新加载,和ListView不一样

    为了从外界(Activity)操作当前的fragment界面,使用了SparseArray<WeakReference<Fragment>>将当前的fragment实例存起来。

    public class WillPagerAdapter extends FragmentStatePagerAdapter {
        // SparseArray是Hashmap的改良品,其核心是折半查找函数(binarySearch)
        SparseArray<WeakReference<Fragment>> registeredFragments = new SparseArray<WeakReference<Fragment>>();
        private List<Will> mList;
    
    
        public WillPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        public WillPagerAdapter(FragmentManager fm, List<Will> list) {
            this(fm);
            // TODO Auto-generated constructor stub
            mList = list;
        }
    
        /*
         * 生成新的 Fragment 对象。 .instantiateItem() 在大多数情况下,都将调用 getItem() 来生成新的对象
         */
        @Override
        public Fragment getItem(int position) {
            // TODO Auto-generated method stub
            WillFragment fragment = WillFragment.newInstance(mList.get(position));
            return fragment;
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            // 得到缓存的fragment
            WillFragment fragment = (WillFragment) super.instantiateItem(container,
                    position);
            WeakReference<Fragment> weak = new WeakReference<Fragment>(fragment);
            registeredFragments.put(position, weak);
            return fragment;
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mList.size();
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            registeredFragments.remove(position);
    
            super.destroyItem(container, position, object);
    
        }
    
        /**
         * 要求getItemPosition、FragmentStatePagerAdapter
         */
        public void remove(int position) {
            mList.remove(position);
            notifyDataSetChanged();
        }
    
        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }public WillFragment getRegisteredFragment(int position) {
            return (WillFragment) registeredFragments.get(position).get();
        }
    }

    Done

  • 相关阅读:
    Windows Phone 7 Ti“.NET研究”ps (1) 狼人:
    Eclipse开发Android应用程序入“.NET研究”门:重装上阵 狼人:
    Android UI基本测验“.NET研究”:线性布局 狼人:
    “.NET研究”Eclipse开发Android应用程序入门 狼人:
    Window“.NET研究”s Phone 7 Tips (2) 狼人:
    文件位置修改strurs2中struts.xml文件的位置
    方法类struts2环境搭建
    平台程序微信平台开发应用的签名
    节点数据TYVJ P1742 [NOI2005]维护序列
    版本编译器Unsupported major.minor version 51.0
  • 原文地址:https://www.cnblogs.com/xingyyy/p/4348991.html
Copyright © 2020-2023  润新知