Android权威编程指南笔记 第十一章 使用ViewPager

第十一章 使用ViewPager

ViewPager

  • 步骤:
  1. 创建ViewPager的视图
  2. 实例化ViewPager
  3. 因为要切换不同的fragment,所以需要获取fragmentManager来进行管理。
  4. 将fm传进FragmentStatePagerAdapter(FragmentManager),并创建匿名实例。
  5. 重写匿名实例的相关方法:
    1.getItem(int position)获取位置,设置相应模型层数据并返回fragment。
    2.getCount()返回数量。
  6. ViewPager 是通过 FragmentStatePagerAdapter()的协助处理各项事件。故将其传入mViewPager.setAdapter( )
	mViewPager =findViewById(R.id.crime_view_pager);
	FragmentManager fragmentManager = getSupportFragmentManager();
        mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
            @Override
            public Fragment getItem(int position) {
                Crime crime = mCrimes.get(position);
                return CrimeFragment.newInstance(crime.getId());
            }
            @Override
            public int getCount() {
                return mCrimes.size();
            }

  • ViewPager默认只显示PagerAdapter中第一个列表项。故在onCreate()方法的末尾添加查找方法。通过匹配ID设定当前位置索引。
for (int i = 0 ; i < mCrimes.size() ; i++){
            if (mCrimes.get(i).getId().equals(crimeId)) {
                mViewPager.setCurrentItem(i);
                break;
            }
}

相关小记

  • ViewPager默认加载左右相邻页面,可以调用setOffscreenPageLimit(int)方法定制预加载相邻页面的数目。
    viewPager.setOffscreenPageLimit(5);
  • FragmentPagerAdapterFragmentStatePagerAdapter区别:
  1. FragmentPagerAdapter创建的Fragment视图不会被销毁,实例还保存在FragmentManager的视图中。
  2. FragmentStatePagerAdapter会彻底移除不需要的fragment。在有较多数据模型时可以使用以节省内存。
  • 深入学习ViewPager工作原理(P186
  1. 在托管非fragment视图时(如图片),ViewPager 需要实现原生PageAdapter接口。
  2. RecyclerView 需要处理大量内部实现工作。并且由于其fragment是由fm来管理,而不是由于其自身。故不能立即创建fragment。
  • ViewPager的布局参数不支持边距设置。

挑战练习

  • 恢复ViewPager的边距。
  1. 通过设置子控件的Padding属性即可。
  • 添加Jump to First/Last 按钮。
        mToFirstButton = findViewById(R.id.btn_to_first);
        mToFirstButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewPager.setCurrentItem(0);
                mToFirstButton.setEnabled(false);
                mToLastButton.setEnabled(true);

            }
        });

        mToLastButton = findViewById(R.id.btn_to_end);
        mToLastButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewPager.setCurrentItem(mCrimes.size()-1);
                mToLastButton.setEnabled(false);
                mToFirstButton.setEnabled(true);

            }
        });
  1. 当不在第一页和最后一页时恢复按钮
                if(viewPager.getCurrentItem() != mCrimes.size()-1){
                    mToLastButton.setEnabled(true);
                }
                if(viewPager.getCurrentItem() != 0){
                    mToFirstButton.setEnabled(true);
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值