为什么在 mViewPager.setCurrentItem(value) 处传递的值在 FragmentStatePagerAdapter 的 getItem(int value) 方法中递增或递减
why value passed at mViewPager.setCurrentItem(value) is incremented or decremented in getItem(int value) method of FragmentStatePagerAdapter
我在我的应用程序中使用了 NagivationDrawer
和 ViewPager
。当用户 select 抽屉中的项目时,视图分页器将相应地设置片段。
在MainActivity中class
....
@Override
public void onNavigationDrawerItemSelected(int position) {
Log.d("POSITION", "=======================================");
Log.d("POSITION ItemSelected", position +"");
if(mViewPager != null){
mViewPager.setCurrentItem(position);
}
}
......
我的 ViewPagerAdapter class 是
public class LessonPageAdapter extends FragmentStatePagerAdapter {
public LessonPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new LessonFragment();
Bundle args = new Bundle();
Log.d("POSITION PagerAdapter", position +"");
args.putInt(LessonFragment.ARG_SECTION_NUMBER, position);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return 7;
}
}
我发现从 onNavigationDrawerItemSelected(int position)
方法调用 mViewPager.setCurrentItem(position)
时传递的 position
的值与 position
I 的值不同(递增或递减)进入 FragmentStatePagerAdapter
的 getItem(int position)
方法。
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 1
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2
11-01 12:32:11.089 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:11.089 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 2
11-01 12:32:11.090 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:32:29.474 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:29.474 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:32:29.475 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 5
11-01 12:32:35.476 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:35.477 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:35.477 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 6
11-01 12:32:43.704 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:43.704 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 6
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:33:00.529 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:00.530 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:33:00.530 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2
谁能告诉我原因?解决方法是什么?
您的应用运行正常吗?在 viewPager 中,不仅加载当前页面,还加载左页和右页,以使滚动看起来无缝。所以调用 getItem() 来预加载下一页,你的日志是完全正确的。
您还可以使用 viewPager.setOffscreenPageLimit(int) 来设置要预加载的每一面的页面数。默认和最小值为 1。
我在我的应用程序中使用了 NagivationDrawer
和 ViewPager
。当用户 select 抽屉中的项目时,视图分页器将相应地设置片段。
在MainActivity中class
....
@Override
public void onNavigationDrawerItemSelected(int position) {
Log.d("POSITION", "=======================================");
Log.d("POSITION ItemSelected", position +"");
if(mViewPager != null){
mViewPager.setCurrentItem(position);
}
}
......
我的 ViewPagerAdapter class 是
public class LessonPageAdapter extends FragmentStatePagerAdapter {
public LessonPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new LessonFragment();
Bundle args = new Bundle();
Log.d("POSITION PagerAdapter", position +"");
args.putInt(LessonFragment.ARG_SECTION_NUMBER, position);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return 7;
}
}
我发现从 onNavigationDrawerItemSelected(int position)
方法调用 mViewPager.setCurrentItem(position)
时传递的 position
的值与 position
I 的值不同(递增或递减)进入 FragmentStatePagerAdapter
的 getItem(int position)
方法。
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 1
11-01 12:31:59.706 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2
11-01 12:32:11.089 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:11.089 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 2
11-01 12:32:11.090 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:32:18.586 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:32:29.474 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:29.474 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:32:29.475 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 5
11-01 12:32:35.476 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:35.477 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:35.477 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 6
11-01 12:32:43.704 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:43.704 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 6
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 5
11-01 12:32:51.287 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 4
11-01 12:33:00.529 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:00.530 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 4
11-01 12:33:00.530 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 3
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION﹕ =======================================
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION ItemSelected﹕ 3
11-01 12:33:09.084 8913-8913/com.example.khaino.drawerandswipedemo D/POSITION PagerAdapter﹕ 2
谁能告诉我原因?解决方法是什么?
您的应用运行正常吗?在 viewPager 中,不仅加载当前页面,还加载左页和右页,以使滚动看起来无缝。所以调用 getItem() 来预加载下一页,你的日志是完全正确的。
您还可以使用 viewPager.setOffscreenPageLimit(int) 来设置要预加载的每一面的页面数。默认和最小值为 1。