从Android适配器的一种写法认识静态内部类

来源:互联网 发布:mac windows分区大小 编辑:程序博客网 时间:2024/05/17 01:10
  • 首先是一个Fragment的适配器类

重点看静态内部类Holder就可以了,在这里其实是Builder模式的使用

    import android.support.v4.app.Fragment;    import android.support.v4.app.FragmentManager;    import android.support.v4.app.FragmentPagerAdapter;    import java.util.ArrayList;    import java.util.List;    /**     * 碎片化界面适配器<br>     * Copyright (c) 2016 ycuzjj@163.com. All rights reserved.     */    public class ContentFragmentAdapter extends FragmentPagerAdapter {        private List<Fragment> fragments = new ArrayList<>();        public ContentFragmentAdapter(FragmentManager fm, List<Fragment> fragments) {            super(fm);            this.fragments = fragments;        }        @Override        public Fragment getItem(int position) {            return fragments.get(position);        }        @Override        public int getCount() {            return fragments.size();        }        @Override        public CharSequence getPageTitle(int position) {            return fragments.get(position).getTag();        }        // 使用静态内部类初始化数据        public static class Holder {            private final List<Fragment> fragments = new ArrayList<>();            private FragmentManager manager;            public Holder(FragmentManager manager) {                this.manager = manager;            }            public Holder add(Fragment f) {                fragments.add(f);                return this;            }            public ContentFragmentAdapter set() {                return new ContentFragmentAdapter(manager, fragments);            }        }    }
  • 在Activity中的使用
 /**     * 初始化viewpager     */   private void initViewPager() {       //缓存3页避免切换时出现空指针       mViewPager.setOffscreenPageLimit(3);    // 使用       mViewPager.setAdapter(new     ContentFragmentAdapter.Holder(getSupportFragmentManager())               .add(IndexFragment.newInstance())               .set());       mViewPager.setCurrentItem(0);       // 添加事件监听       mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {           @Override           public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {           }           @Override           public void onPageSelected(int position) {               ((TabView) mTabGroup.getChildAt(position)).setChecked(true);           }           @Override           public void onPageScrollStateChanged(int state) {           }       });   }
  • 好处

    1. 在这里用静态内部类其实是实现了Builder模式,可以多次设置对象的属性而无需重新获取引用
原创粉丝点击