分享

14. ViewPager + Fragment 实现左右滑动

 黎可图书馆 2014-07-08
一. 概念
1. Fragment
Fragment作为Activity界面的一部分组成出现
可以在一个Activity中同时出现多个Fragment,并且,一个Fragment亦可在多个Activity中使用。
在Activity运行过程中,可以添加、移除或者替换Fragment(add()、remove()、replace())
Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接被其所属的宿主activity的生命周期影响。
  Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计。平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互。Fragment允许这样的一种设计,而不需要你亲自来管理 viewhierarchy的复杂变化。 通过将activity的布局分散到fragment中, 你可以在运行时修改activity的外观,并在由activity管理的back stack中保存那些变化.
例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章--2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输入事件。 因此, 取代使用一个activity来选择一篇文章而另一个activity来阅读文章的方式,用户可以在同一个activity中选择一篇文章并且阅读, 如图所示:
 

2. ViewPager
ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“android-support-v4.jar”

 二. 实现
1. 首先在Activity中放入ViewPager控件
<android.support.v4.view.ViewPager 
 android:id="@+id/pager" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" >
 </android.support.v4.view.ViewPager>

2. 创建三个Fragment
(1) 创建布局文件
(2) 创建类继承Fragment
public class PageOneFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_one, container,
false);
return rootView;
}
}

3. 为ViewPager创建Adapter
(1) 创建类继承FragmentPagerAdapter
(2) 重写getItem(int index) 以及 getCount() 方法
注意:自定义的构造函数一定要实现父类的构造函数 super(fm); 
public class MyPagerAdapter extends FragmentPagerAdapter { 
private List<Fragment> fragments = new ArrayList<Fragment>(); 

 public MyPagerAdapter(FragmentManager fm){ 
 super(fm); 
 } 

 public MyPagerAdapter(FragmentManager fragmentManager, 
ArrayList<Fragment> fragments){ 
 super(fragmentManager); this.fragments = fragments; 
 }

 @Override 
 public Fragment getItem(int index) { 
 return fragments.get(index); 
 } 

 @Override 
 public int getCount() { 
 return fragments.size(); 
 } 
 }

4. 在Activity中将之前创建的3个Fragment加入到ViewPager中
ViewPager pager = null; 
 ArrayList<Fragment> fragments = null; 
 PagerAdapter adapter = null;

private void initFragment(){
fragments.add(new PageOneFragment()); 
fragments.add(new PageTwoFragment()); 
fragments.add(new PageThreeFragment());
}
//实现之前写的adapter并赋给ViewPager即可
private void initPager(){
adapter = new MyPagerAdapter(getSupportFragmentManager(), fragments);
pager.setAdapter(adapter);
}

5. 至此,就已经实现了左右滑动切换页面的效果。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多