在上一篇文章中,讲解了使用PagerAdapter作为适配器时的ViewPager的使用方法。然后在实际项目中更多的使用Fragment作为页卡,因为实际开发中每一个页卡要复杂的多。而使用Fragment有利于切断每一个页卡与MainActivity的联系,在各自的Fragment上实现自己更复杂的功能。其实使用Fragment作为填充,大部分的代码都与使用View作为填充类似,如果你还不知道怎么使用View来作为页卡,可以点击下面的链接,进行阅读学习:

http://www.cnblogs.com/fuly550871915/p/4922953.html

 

       下面我们以一个完整的例子,来讲一下使用FragmenStatePagerAdapter作为适配器,ViewPager使用方法。由于大部分的知识都在上一篇文章(使用View作为填充ViewPager)中讲过,因此具体的代码解释就不再进行了。

        新建项目,然后新建布局,作为Fragment的填充物。首先是layout1.xml。如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:gravity="center" >
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="我是第一个界面"
11         android:textSize="30sp"/>
12 
13 </LinearLayout>

       代码很简单,不解释。然后再建立同样的三个布局,分别命名为layout2.xml,layout3.xml,layout4.xml。唯一不同的就是第10行文本的显示不同而已。具体代码同上,就不贴出来了。然后就可以建立Fragment类了。

      新建类Fragment1,继承自Fragment。其中的代码如下:

 1 package com.example.viewpager;
 2 
 3 import android.os.Bundle;
 4 import android.support.v4.app.Fragment;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 
 9 public class Fragment1 extends Fragment{
10     
11     public View onCreateView(LayoutInflater inflater, ViewGroup container,
12             Bundle savedInstanceState) {
13 
14         return inflater.inflate(R.layout.layout1, null);
15     }
16 }

         从代码中发现,将layout1这个布局加载给了Fragment1.同样的道理,新建Fragment2,Fragment3,Fragment4,分别用来加载layout2,layout3,layout4.

        就这样子,所有的Fragment都准备好了。下面开始写适配器,就采用FragmentStatePagerAdapter吧。代码如下:

 1 package com.example.viewpager;
 2 
 3 import java.util.List;
 4 
 5 import android.support.v4.app.Fragment;
 6 import android.support.v4.app.FragmentManager;
 7 import android.support.v4.app.FragmentStatePagerAdapter;
 8 import android.view.ViewGroup;
 9 
10 /**
11  * ViewPager的适配器
12  * @author fuly1314
13  *
14  */
15 public class FragmentAdapter extends FragmentStatePagerAdapter{
16 
17     private List<Fragment> fragmentList;//数据源
18     private List<String> titles;//标题
19     
20     public FragmentAdapter(FragmentManager fm,List<Fragment> fragmentList,List<String> titles) {
21         super(fm);
22         this.fragmentList = fragmentList;
23         this.titles = titles;
24     }
25 
26     //相应页卡设定相应的Fragment
27     public Fragment getItem(int arg0) {
28     
29         return fragmentList.get(arg0);
30     }
31 
32     //数据源的数目
33     public int getCount() {
34     
35         return fragmentList.size();
36     }
37 
38     /*
39      * 对于FragmentStatePagerAdapter,它的销毁和实例方法,即
40      * destroyItem和instantiateItem方法保持默认即可
41      */
42     public void destroyItem(ViewGroup container, int position, Object object) {
43 
44         super.destroyItem(container, position, object);
45     }
46 
47     public Object instantiateItem(ViewGroup arg0, int arg1) {
48 
49         return super.instantiateItem(arg0, arg1);
50     }
51 
52     //设定标题
53     public CharSequence getPageTitle(int position) {
54         
55         return titles.get(position);
56     }
57     
58 }

      注意的红色的代码。应该注意的是,FragmentStatePagerAdapter的销毁item和显示item的方法都保持默认的写法即可。

      然后就是MainActivity中的代码了,如下:

 1 package com.example.viewpager;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.support.v4.app.FragmentActivity;
 9 import android.support.v4.view.PagerTabStrip;
10 import android.support.v4.view.ViewPager;
11 import android.support.v4.view.ViewPager.OnPageChangeListener;
12 import android.view.LayoutInflater;
13 import android.widget.Toast;
14 import android.graphics.Color;
15 
16 public class MainActivity extends FragmentActivity implements OnPageChangeListener{
17     
18     private ViewPager pager;
19     private List<Fragment> fragmentList = new ArrayList<Fragment>();//数据源
20     private FragmentAdapter fragmentAdapter;
21     
22     private List<String> titles = new ArrayList<String>();//标题
23     
24     private PagerTabStrip pagerTitle;//ViewPager的标题
25     
26 
27     protected void onCreate(Bundle savedInstanceState) {
28         super.onCreate(savedInstanceState);
29         setContentView(R.layout.activity_main);
30         
31         //获取ViewPager
32         pager = (ViewPager) findViewById(R.id.view_pager);
33         
34         pager.setOnPageChangeListener(this);//设置监听器
35         
36         //获取pagerTitle
37         pagerTitle = (PagerTabStrip) findViewById(R.id.pager_title);
38         
39         //为标题设置属性,比如背景,颜色线等
40         pagerTitle.setBackgroundColor(Color.RED);//设置背景颜色
41         pagerTitle.setTextColor(Color.YELLOW);//设置标题文字的颜色
42         pagerTitle.setDrawFullUnderline(false);//将标题下的长分割线去掉
43         pagerTitle.setTabIndicatorColor(Color.BLUE);//设置标题下粗一点的短分割线的颜色
44         
45         //添加标题
46         titles.add("第一页");
47         titles.add("第二页");
48         titles.add("第三页");
49         titles.add("第四页");
50         
51         
52         
53         
54    55         
56         //获取四个Fragment
57         Fragment1 fragment1 = new Fragment1();
58         Fragment2 fragment2 = new Fragment2();
59         Fragment3 fragment3 = new Fragment3();
60         Fragment4 fragment4 = new Fragment4();
61         
62         //将四个Fragment加入到集合
63         fragmentList.add(fragment1);
64         fragmentList.add(fragment2);
65         fragmentList.add(fragment3);
66         fragmentList.add(fragment4);
67         
68         //实例化适配器
69         fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragmentList,titles);
70         
71         //设置适配器
72         pager.setAdapter(fragmentAdapter);
73     }
74 
75 
76 
77     //当滚动状态改变时被调用
78     public void onPageScrollStateChanged(int arg0) {
79     
80         
81     }
82 
83 
84     //滚动时调用
85     public void onPageScrolled(int arg0, float arg1, int arg2) {
86     
87         
88     }
89 
90 
91     //当页卡被选中时调用
92     public void onPageSelected(int arg0) {
93         
94         Toast.makeText(this, "这是第"+(arg0+1)+"个界面", Toast.LENGTH_LONG).show();
95         
96     }
97 
98     
99 }

      注意红色的代码,此时继承的是FragmentActivity。而且所有导入的包,都应该是android.support.v4下的。

        好了,现在都写好了,运行程序即可,效果图如下:

 

 

总结:
如果用Fragment作为页卡,需要注意:
(1)活动继承的是FragmentActivity,而不是Activity。
(2)相关的导包都应该是android.support.v4下的包。
(3)对于FragmentStatePagerAdapter,它的destroyItem和instantiateItem方法保持默认即可,不用编写。

 

posted on 2015-10-30 16:43  fuly  阅读(1119)  评论(0编辑  收藏  举报