Android编程权威指南(第二版)第十一章-使用ViewPager

为了方便用户的体验,一般在详细页面中可以添加左右滑动切换页面,那么可以为UI添加ViewPager,用户可滑动屏幕,切换查看不同列表项的明细页面。

第一步,创建以ViewPager为根视图的布局文件,activity_pager.xml

<android.support.v4.view.ViewPager

  xmlns:android="....."

  android:id="@+id/activity_view_pager"

  ....../>

注意,必须使用ViewPager的包名全称(android.support.v4.view.ViewPager)

第二步,创建PagerActivity,创建并管理ViewPager

ViewPager需要借助于PagerAdapter提供视图,ViewPager与PagerAdapter间的配合很复杂。Google提供了PagerAdapter的子类FragmentStatePagerAdapter,它能协助处理许多细节问题。

public class CrimePagerActivity extends FragmentActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pager);//绑定布局文件

    mViewPager = (ViewPager) findViewById(R.id.activity_view_pager);//得到viewPager组件

    FragmentManager fragmentManager = getSupportFragmentManager();//得到FragmentManager实例

    mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {

      @Override
      public Fragment getItem(int position) {......}

      @Override
      public int getCount() {.......}
    });
  }
}

第三步,配置使用PagerActivity-创建newIntent方法

public static Intent newIntent(Context packageContext, .....) {

  Intent intent = new Intent(packageContext, PagerActivity.class);
  intent.putExtra(......);
  return intent;

}

然后在点击事件中调用newIntent创建Intent,就可以显示ViewPager了。

....部分,指的是,可以传进参数,通常是,放进intent中来指定ViewPager应该显示的是哪一个详细信息,一般是放ID,然后在onCreate中使用getIntent().getSerializableExtra(键)来得到ID,来从模型得到需要绑定在视图上的数据。

 

MORE:FragmentStatePagerAdapter 与 FragmentPagerAdapter

FragmentPagerAdapter是另外一种可用的PagerAdapter,其用法与FragmentStatePagerAdapter基本一致。唯一的区别在于:卸载不再需要的fragment时,各自采用的处理方法有所不同。

FragmentStatePagerAdapter会销毁不需要的fragment.事务提交后,activity的FragmentManager中的fragment会被彻底移除。 FragmentStatePagerAdapter类名中的“ state”表明:在销毁fragment时,可onSaveInstanceState(Bundle)方法中保存fragment的Bundle信息。用户切换回来时,保存的实例状态可用来恢复生成新的fragment.

相比之下,FragmentPagerAdapter有不同的做法。对于不再需要的fragment, FragmentPagerAdapter会选择调用事务的detach(Fragment)方法来处理它,而非remove(Fragment)方法。也就是说, FragmentPagerAdapter只是销毁fragment的视图, fragment实例还保留在FragmentManager中。因此, FragmentPagerAdapter创建的fragment永远不会被销毁。

通常来说,对于要使用大量pager的应用来说,使用FragmentStatePagerAdapter更节省内存。 另一方面,如果用户界面只需要少量固定的fragment,则FragmentPagerAdapter是个安全、合适的选择。

 

ViewPager的工作原理其实还是比较复杂的上述讲的只是满足一般的应用,但是如果需要更加准确详细的介绍内容,还需要查阅更多的资料。

 

posted @ 2017-03-10 11:00  HeLing_CC  阅读(140)  评论(0)    收藏  举报