《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
若有错误,敬请指出,谢谢 : )