您的位置:首页 > 移动开发 > Android开发

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

2018-03-27 23:36 459 查看

《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
若有错误,敬请指出,谢谢 : )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android