为ViewPager添加适配器

来源:互联网 发布:db2执行sql脚本 编辑:程序博客网 时间:2024/05/02 01:15

ViewPager有两个常用的适配器,这两个适配器都继承于PagerAdapter,并将Fragment作为数据源:

  • FragmentPagerAdapter:  这种适配器从始至终保存所有页面的Fragment的实例。当页面形式固定且数量较小的时候,可以选择这种适配器。
  • FragmentStatePagerAdater: 这种适配器只会保存当前、前一个和后一个页面的Fragment。当页面数量较多或者需要动态改变数量时,可以选择。

二者的使用方法是完全相同的,下面以FragmentPagerAdapter说明。

创建Fragment,并为Fragment加载布局

在xml文件中定义Fragment使用的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <TextView        android:id="@+id/text_view"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:textSize="30sp" /></RelativeLayout>

创建Fragment,并加载此布局:

public class MyFragment extends Fragment {private int num;public MyFragment(int num){this.num = num;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View v = inflater.inflate(R.layout.view_1, container, false);TextView textView = (TextView) v.findViewById(R.id.text_view);textView.setText("This is the #" + (num + 1) + " view");return v;}}

创建适配器

创建一个类继承于FragmentPagerAdapter,重写其中的getItem() 和getCount() 方法。getItem() 方法返回一个Fragment对象作为页面的内容,getCount() 返回页面的个数。

如果设置了选项卡导航栏,还可以重写getPageTitle() 来返回选项卡的标题:

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int position) {return new MyFragment(position);}@Overridepublic int getCount() {return 4;}@Overridepublic CharSequence getPageTitle(int position) {String title = "Tab #" + (position + 1);return title;}}

PS: 这里每个页面使用了相同的布局,仅仅是改变了布局中显示的内容。如果每个页面要使用不同的布局,也可以为每一个布局文件创建一个Fragment,并将所有的Fragment保存在一个集合中,然后在getItem方法中返回不同的Fragment对象。

绑定适配器

adapter1 = new MyFragmentPagerAdapter(getSupportFragmentManager());viewPager.setAdapter(adapter1);

MyFragmentPagerAdapter接收一个FragmentManager对象作为构造参数。为了使程序能够兼容,需要让MainActivity继承FragmentActivity,并且使用getSupportFragmentManager() 方法。

0 0