ViewPager与PagerAdapter

1.ViewPager与PagerAdapter

ViewPager在某种程度上类似于RecyclerView。RecyclerView需要借助Adapter提供视图,同样,ViewPager需要PagerAdapter的支持。
 Google提供了PagerAdapter的子类FragmentStatePagerAdapter,它提供了getCount()getItem()方法,化繁为简,能协助处理很多问题。

public class CrimePagerActivity extends AppCompatActivity {
      private ViewPager mViewPager;
      private List mCrimes;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_crime_pager);

           mViewPager = findViewById(R.id.crime_view_pager);


            mCrimes = CrimeLab.get(this).getCrimes();
            FragmentManager fragmentManager = getSupportFragmentManager();
            mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {

                @Override
                public Fragment getItem(int position) {
                   Crime crime = mCrimes.get(position);
                    return CrimeFragment.newInstance(crime.getId());
                  }
        
                @Override
                public int getCount() {
                    return mCrimes.size();
                }
            });
          mViewPager.setCurrentItem(int position);
      }
}

 getCount()和getItem()这两个方法简单直接。getCount()返回数量getItem()方法根据位置,返回具体的实例

 然而,ViewPager默认只显示PagerAdapter中的第一个列表项。要显示选中的列表项,可进行如下设置:

mViewPager.setCurrentItem(int position);

2.FragmentStatePagerAdapter 与 FragmentPagerAdapter

  • FragmentStatePagerAdapter---①
  • FragmentPagerAdapter---②
     上述二者的唯一区别在于,①会销毁不需要的fragment。事务提交后,activity的FragmentManager中的fragment会被彻底移除
     相比之下,②有不同的做法。对于不再需要的fragment,②会选择调用事务的detach()方法来处理它,而非remove()方法。也就是说②只是销毁了fragment的视图,而fragment的实例还保留在FragmentManager中

 选择哪种adapter取决于应用的要求。通常来说,使用FragmentStatePagerAdapter更节省内存
 另一方面,如果用户界面只需要少量固定的fragment,则②是安全、合适的选择。最常见的例子就是使用tab选项页显示用户界面。

你可能感兴趣的:(ViewPager与PagerAdapter)