《Android编程权威指南(第三版)》第十一章挑战练习Demo

《Android编程权威指南(第三版)》第十一章挑战练习Demo

本章有两个挑战练习,第一个就不过多赘述了,有三种方法,现在主要是说第二个挑战练习,先上结果动态图:

当点击第一个时没有To First,当滑动到第二个时有出现,当点击To Last时,跳转到最后一个item,然后To Last没了,主要代码:

CrimePagerActivity.java:

mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
            @Override
            public Fragment getItem(int position) {
                Crime crime = mCrimes.get(position);
                /**
                 * 查看源代码时注意看这里的日志打印
                 */
                Log.i("CrimePagerActivity", "当前item的getCurrentItem()位置" + mViewPager.getCurrentItem());
                Log.i("CrimePagerActivity", "当前item的position位置" + position);
                /**
                 * 这里是获取到点击进来的item的位置:在这里特别说明,getItem()方法的形参position
                 * 得到的第当前item前一个和后羿后一个的item的位置,获得位置后预先加载先一个位置
                 * 的视图,而mAdapter.getCurrentItem()得到的是当前item的位置,但是!这里要注意!
                 * 当item翻到position==1时,已经将position==0位置的视图加载好了,当翻到第0个item
                 * 时,getCurrentItem()不会更新为0,还是1,所以在这里的setButtonView()方法的作用
                 * 只是为了得到从列表点击进来后启动的item,滑动获得的item交给addOnPageChangeListener
                 */
                setButtonView(mViewPager.getCurrentItem());
                return CrimeFragment.newInstance(crime.getId());
            }

            @Override
            public int getCount() {
                return mCrimes.size();
            }
        });
        /**
         * 在此声明,这个方法在这个挑战中很重要!很重要!很重要!当滑动item是就会调用这个方法
         * 这个方法中的onPageSelected()回调方法是用来获取item滑动变化后当前的item,而他的形参
         * 就是当前item的位置
         */
        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                setButtonView(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

这里是那两个按钮的代码:

ToFirst.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view) {
                mViewPager.setCurrentItem(0);
            }
        });
        ToLast.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view) {
                mViewPager.setCurrentItem(mCrimes.size() - 1);
            }
        });

设置按钮是否可见的代码:

private void setButtonView(int position) {
        if (position == 0){
            ToFirst.setVisibility(View.INVISIBLE);
            ToLast.setVisibility(View.VISIBLE);
        }
        if (position == mCrimes.size() - 1){
            ToLast.setVisibility(View.INVISIBLE);
            ToFirst.setVisibility(View.VISIBLE);
        }
        if (position != 0 && position != mCrimes.size() - 1) {
            ToFirst.setVisibility(View.VISIBLE);
            ToLast.setVisibility(View.VISIBLE);
        }
    }

这里说明一下View.addOnPageChangeListener():

1.onPageSelected(int position):这个方法有一个参数position,代表哪个页面被选中。

2.onPageScrolled(int position,float positionOffset, int positionOffsetPixels):这个方法会在屏幕滚动过程中不断被调用。

3.onPageScrollStateChanged(int state):这个方法在手指操作屏幕的时候发生变化。

具体注意事项已在代码注释总说明,这里是源码:Demo

扫描二维码关注公众号,回复: 141707 查看本文章

若有错误,敬请指出,谢谢 : )

猜你喜欢

转载自blog.csdn.net/chentyit/article/details/79721236