循环ViewPager。 片段在第一轮之后不能正常工作

好的,所以我需要循环ViewPager。 我真的很难实现它。 现在我已经实现了它并且它正在工作正常,因为圆形滚动是关注。 但是我注意到了一个问题。这是在第一轮滚动片段不起作用之后。 我有三个碎片,里面有一个按钮。 按钮在第一轮工作,但当我回到第一页按钮不起作用。 ps我使用假页面技术使viewpager循环。

这是代码

mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this)); //mViewPager.setOnPageChangeListener(new CircularViewPagerHandler(mViewPager)); mViewPager.setCurrentItem(1, false); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 0) { mViewPager.setCurrentItem(3, false); Log.d("TAG", "Swiped before first page, looping and resetting to last page."); } else if (position == 4) { mViewPager.setCurrentItem(1, false); Log.d("TAG", "Swiped beyond last page, looping and resetting to first page."); } } @Override public void onPageScrollStateChanged(int state) { Log.d("onPageScrollState", "state:" + state); int currentPage = mViewPager.getCurrentItem(); if(currentPage==1){ imgCenter.setImageResource(R.drawable.take_ride); imgLeft.setImageResource(R.drawable.give_ride); imgRight.setImageResource(R.drawable.setting); } if(currentPage==2){ imgCenter.setImageResource(R.drawable.setting); imgRight.setImageResource(R.drawable.take_ride); imgLeft.setImageResource(R.drawable.give_ride); } if (currentPage==3){ imgCenter.setImageResource(R.drawable.give_ride); imgLeft.setImageResource(R.drawable.take_ride); imgRight.setImageResource(R.drawable.setting); } } }); 

这里是PagerAdapter类

  public class PagerAdapter extends FragmentPagerAdapter { Context mcontext; public PagerAdapter(FragmentManager fm, Context context) { super(fm); mcontext = context; } @Override public Fragment getItem(int position) { if (position == 0) { return new HomeFragment2(); } else if(position==1){ return new HomeFragment(); } else if (position == 2) { return new SettingFragment(); } else if(position==3){ return new HomeFragment2(); } else return new HomeFragment(); } @Override public int getCount() { return 5; } } 

我用PagerAdapter和带有Button简单Fragment创建了一个简单的测试应用程序:

在此处输入图像描述

它工作正常!

我已在此处上传了源代码,因此您可以查看它,看看是否与您的有任何不同。

作为我使用的Fragment

 public class FragmentA extends android.support.v4.app.Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_a, container, false); rootView.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar.make(v, "Hi, fragment A", Snackbar.LENGTH_SHORT).show(); } }); return rootView; } } 

所以我可以推荐

  • 用一些假的片段替换你的片段(如上面那个)。 如果它有效 – 问题出在Fragment代码中,而不是循环ViewPager中

  • 如果它仍然不起作用 – 我会尝试多次重新创建片段 – 创建它们一次并存储:

      public class PagerAdapter extends FragmentPagerAdapter { Context mcontext; Fragment [] fragments; public PagerAdapter(FragmentManager fm, Context context, Fragment [] fragments) { super(fm); mcontext = context; this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments[position]; } @Override public int getCount() { return fragments.length; } } 

    Activity

     Fragment[] fragments = { Fragment.instantiate(this, FragmentC.class.getName()), Fragment.instantiate(this, FragmentA.class.getName()), Fragment.instantiate(this, FragmentB.class.getName()), Fragment.instantiate(this, FragmentC.class.getName()), Fragment.instantiate(this, FragmentA.class.getName()), }; ..... viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this, fragments)); 

如果有帮助,请告诉我!