安卓开发_深入学习ViewPager控件

简介: 一、概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view。 ViewPager特点:   1)ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他的view类。

一、概述

ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view。

ViewPager特点:

  1)ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他的view类。

  2)ViewPager类需要一个PagerAdapter适配器类(通常需要自定义适配器继承PagerAdapter类重写其中的方法)给它提供数据。

  3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

 

二、关键方法

setCurrentItem(int position)           显示第position页的View(界面)
setAdapter()                                    设置ViewPager的适配器,参数为是适配器
setOnPageChangeListener()           设置页面改变事件监听事件
setOffscreenPageLimit(int limit)       设置脱离屏幕的页面限制--最多同时显示的页面数 

 

三、适配器

ViewPager相关适配器:

1、PagerAdapter  需要重写getCount(),isViewFromObject()方法,添加instantiateItem(),destroyItem()方法

2、FragmentPagerAdapter和FragmentStatePagerAdapter

区别:

FragmentPagerAdapter  //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,则销毁fragment(a)的View,fragment(a)不销毁

FragmentStatePagerAdapter //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,则销毁fragment(a)

 

四、通过简单的Demo学习ViewPager的使用步骤

1、在布局文件中使用<android.support.v4.view.ViewPager>标签

 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6 
 7     <android.support.v4.view.ViewPager    //用于显示ViewPager
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:id="@+id/viewPager"        
11         />
12 
13 </FrameLayout>

 

2、代码中增加显示的页面(创建一个存放View的集合,向集合中添加的View就是要显示的View,比如三个界面都是ImageView),

 1 View views = new ArrayList<View>();
 2         int image[] = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};  //这里三张图片分别是红,黄,蓝色的图片
 3         for(int i=1;i<=3;i++)
 4         {
 5             //实例化中ViewPager中要显示的图片控件
 6             imageView = new ImageView(getApplicationContext());
 7             //设置图片格式
 8             imageView.setScaleType(ScaleType.CENTER_CROP);
 9             imageView.setImageResource(image[i-1]);
10             views.add(imageView);
11         }

 

3、在Activity里实例化ViewPager组件,并设置它的Adapter(即PagerAdapter)

 1        //实例化适配器
 2         MyPagerAdapter adapter = new MyPagerAdapter();
 3         //设置适配器
 4         
 5         viewPager.setAdapter(adapter);
 6 
 7 //声明PagerAdapter子类,用于管理ViewPager中显示的View控件,重写四个方法
 8     class MyPagerAdapter extends PagerAdapter
 9     {
10 
11         @Override
12         public int getCount() {
13             // TODO Auto-generated method stub
14             return views.size();
15         }
16 
17         //判断当前显示的UI对象是否和数据对象一致
18         @Override
19         public boolean isViewFromObject(View arg0, Object arg1) {
20             // TODO Auto-generated method stub
21             return arg0 == arg1;
22         }
23         
24         @Override
25         public Object instantiateItem(ViewGroup container, int position) {
26             //获得指定位置的View,并增加到ViewPager中,同时作为当前页面的数据返回
27             container.addView(views.get(position));
28             return views.get(position);
29             
30         }
31         
32         @Override
33         public void destroyItem(ViewGroup container, int position, Object object) {
34             //当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,是则将当前页面移除
35             container.removeView(views.get(position));
36         }
37         
38         
39     }
40     

完整java代码:

  1 package com.example.myviewpager;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import android.app.Activity;
  7 import android.os.Bundle;
  8 import android.support.v4.view.PagerAdapter;
  9 import android.support.v4.view.ViewPager;
 10 import android.support.v4.view.ViewPager.OnPageChangeListener;
 11 import android.view.Menu;
 12 import android.view.View;
 13 import android.view.ViewGroup;
 14 import android.widget.ImageView;
 15 import android.widget.ImageView.ScaleType;
 16 
 17 public class MainActivity extends Activity {
 18     
 19     private ImageView imageView;
 20     //自定义Pager适配器继承PagerAdapter
 21     private MyPagerAdapter adapter;
 22     // ViewPager控件
 23     private ViewPager viewPager;
 24     //存放View类数据的集合
 25     private List<View> views; 
 26     
 27     
 28     @Override
 29     protected void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.activity_main);
 32         
 33         viewPager = (ViewPager) findViewById(R.id.viewPager);
 34         
 35         initView();
 36         
 37     }
 38 
 39     private void initView() {
 40         //加载ViewPager中显示的页面
 41         //实例化集合
 42         views = new ArrayList<View>();
 43         int image[] = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};
 44         
 45         for(int i=1;i<=3;i++)
 46         {
 47             //实例化中ViewPager中要显示的图片控件
 48             imageView = new ImageView(getApplicationContext());
 49             //设置图片格式
 50             imageView.setScaleType(ScaleType.CENTER_CROP);
 51             imageView.setImageResource(image[i-1]);
 52             views.add(imageView);
 53             
 54         }
 55         //实例化适配器
 56         adapter = new MyPagerAdapter();
 57         //设置适配器
 58         
 59         viewPager.setAdapter(adapter);
 60         //设置移除UI的间隔大小,默认为1
 61 //        viewPager.setOffscreenPageLimit(3);
 62         
 63     }
 64 
 65     //声明PagerAdapter子类,用于管理ViewPager中显示的View控件
 66     class MyPagerAdapter extends PagerAdapter
 67     {
 68 
 69         @Override
 70         public int getCount() {
 71             // TODO Auto-generated method stub
 72             return views.size();
 73         }
 74 
 75         //判断当前显示的UI对象是否和数据对象一致
 76         @Override
 77         public boolean isViewFromObject(View arg0, Object arg1) {
 78             // TODO Auto-generated method stub
 79             return arg0 == arg1;
 80         }
 81         
 82         @Override
 83         public Object instantiateItem(ViewGroup container, int position) {
 84             //获得指定位置的View,并增加到ViewPager中,同时作为当前页面的数据返回
 85             container.addView(views.get(position));
 86             return views.get(position);
 87             
 88         }
 89         
 90         @Override
 91         public void destroyItem(ViewGroup container, int position, Object object) {
 92             //当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,是则将当前页面移除
 93             container.removeView(views.get(position));
 94         }
 95         
 96         
 97     }
 98     
 99     
100     @Override
101     public boolean onCreateOptionsMenu(Menu menu) {
102         // Inflate the menu; this adds items to the action bar if it is present.
103         getMenuInflater().inflate(R.menu.main, menu);
104         return true;
105     }
106 
107 }
MainActivity.java

效果图;

 

相关知识:

安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)

 

五、进步一学习,实现底部ViewPager+导航标签的效果

效果为:

底部有导航部分,点击对应的导航按钮(圆点)ViewPager跳转到对应的View界面,

获得ViewPager界面,底部导航圆点对应变化

思路:动态添加导航图标(3个圆点,对应的是ImageView),点击圆点,执行事件响应,ViewPager跳转 viewPager.setCurrentItem(position);//注意下标从0开始

滑动ViewPager,获得当前View界面在ViewPager中的位置,对应显示导航图标(三个圆点)

 

效果图:

 

关键部分:

1、动态添加导航图标,并添加响应事件

 1 //实例化导航图标
 2             ImageView navImage = new ImageView(getApplicationContext());
 3             //给每个导航图标设置一个标签,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2
 4             navImage.setTag(i-1);
 5             //将导航图标的ImageView控件添加到其父容器中 ,即LinearLayout中
 6             linearLayout.addView(navImage,layoutParams);
 7             //设置导航图片的点击事件
 8             navImage.setOnClickListener(new OnClickListener() {
 9                 
10                 @Override
11                 public void onClick(View v) {
12                     // TODO Auto-generated method stub
13                     //得到导航图标的位置,显示对应的页面
14                     int position = (Integer) v.getTag();
15                     viewPager.setCurrentItem(position);//注意下标从0开始
16                 }
17             });

2、选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置),即滑动ViewPager 根据当前界面View的位置设置对应导航图标哪个位置的圆点亮
 1 
 2     public void selectNavImage(int position)
 3     {
 4         ImageView navImage = null;
 5         //遍历导航布局中所有的子控件,判断子控件的位置是否为选择位置,
 6         for(int i=0;i<linearLayout.getChildCount();i++)
 7         {
 8             navImage = (ImageView) linearLayout.getChildAt(i);
 9             if(i==position)
10                 navImage.setImageResource(R.drawable.page_now); //亮圆点,
11             else 
12                 navImage.setImageResource(R.drawable.page);  //暗圆点
13         }
14     }

 

3、设置ViewPager滑动响应事件

 1 //设置ViewPager的页面滑动事件
 2         viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 3             
 4             @Override
 5             public void onPageSelected(int arg0) {
 6                 //指定位置的页面被选择
 7                 selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标
 8             }
 9             
10             @Override
11             public void onPageScrolled(int arg0, float arg1, int arg2) {
12                 //第一个参数,滚动页面开始的位置,
13                 //第二个参数,两个页面之间滚动的偏移量,返回值为0--1开区间
14                 //第三个参数,两个页面之间滚动的像素偏移量
15                 
16             }
17             
18             @Override
19             public void onPageScrollStateChanged(int arg0) {
20                 // TODO Auto-generated method stub
21                 /*
22                  * 页面滚动状态发生变化时,有开始滚动,停止滚动,正在设置页面三个功能
23                  * ViewPager.SCROLL_STATE_DRAGGING开始滚动
24                  * ViewPager.SCROLL_STATE_IDEL 停止滚动
25                  * ViewPager.SCROLL_STATE_SETTLING 这在设置页面,即将要停止,并且设置当前页显示的页面
26                  * 
27                  */
28             }
29         });

 

4、布局文件中添加导航部分布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.support.v4.view.ViewPager
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/viewPager"        
        />

    <LinearLayout 
        android:id="@+id/navLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:gravity="center"
        android:background="#4000"
        android:orientation="horizontal"
        android:layout_gravity="bottom"
        android:layout_marginBottom="10dp"
        
        ></LinearLayout>
</FrameLayout>

 

完整java代码:

  1 package com.example.myviewpager;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import android.app.Activity;
  7 import android.net.VpnService;
  8 import android.os.Bundle;
  9 import android.support.v4.view.PagerAdapter;
 10 import android.support.v4.view.ViewPager;
 11 import android.support.v4.view.ViewPager.OnPageChangeListener;
 12 import android.view.Menu;
 13 import android.view.View;
 14 import android.view.View.OnClickListener;
 15 import android.view.ViewGroup;
 16 import android.widget.ImageView;
 17 import android.widget.ImageView.ScaleType;
 18 import android.widget.LinearLayout;
 19 import android.widget.LinearLayout.LayoutParams;
 20 
 21 public class MainActivity extends Activity {
 22     
 23     private ImageView imageView;
 24     //自定义Pager适配器继承PagerAdapter
 25     private MyPagerAdapter adapter;
 26     // ViewPager控件
 27     private ViewPager viewPager;
 28     //存放View类数据的集合
 29     private List<View> views; 
 30     
 31     //Demo2
 32     //线性布局中 子控件使用的布局参数对象,用来设置子空间的大小,边距等属性
 33     private LinearLayout.LayoutParams layoutParams;
 34     //存放导航图标的线性布局
 35     private LinearLayout linearLayout;
 36     private ImageView navImage;
 37     
 38     @Override
 39     protected void onCreate(Bundle savedInstanceState) {
 40         super.onCreate(savedInstanceState);
 41         setContentView(R.layout.activity_main);
 42         
 43         viewPager = (ViewPager) findViewById(R.id.viewPager);
 44         linearLayout = (LinearLayout) findViewById(R.id.navLayout);
 45         //初始化显示的页面
 46         initView();
 47         
 48         
 49         //Demo2
 50         //设置ViewPager的页面滑动事件
 51         viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 52             
 53             @Override
 54             public void onPageSelected(int arg0) {
 55                 //指定位置的页面被选择
 56                 selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标
 57             }
 58             
 59             @Override
 60             public void onPageScrolled(int arg0, float arg1, int arg2) {
 61                 //第一个参数,滚动页面开始的位置,
 62                 //第二个参数,两个页面之间滚动的偏移量,返回值为0--1开区间
 63                 //第三个参数,两个页面之间滚动的像素偏移量
 64                 
 65             }
 66             
 67             @Override
 68             public void onPageScrollStateChanged(int arg0) {
 69                 // TODO Auto-generated method stub
 70                 /*
 71                  * 页面滚动状态发生变化时,有开始滚动,停止滚动,正在设置页面三个功能
 72                  * ViewPager.SCROLL_STATE_DRAGGING开始滚动
 73                  * ViewPager.SCROLL_STATE_IDEL 停止滚动
 74                  * ViewPager.
 75                  * 
 76                  */
 77             }
 78         });
 79         
 80     }
 81 
 82     private void initView() {
 83         //加载ViewPager中显示的页面
 84         //实例化集合
 85         views = new ArrayList<View>();
 86         int image[] = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};
 87         navImage = null;
 88         //设置子控件(导航图标ImageView)的属性
 89         layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
 90         layoutParams.leftMargin = 20; //默认单位ps
 91         layoutParams.rightMargin = 20;
 92         
 93         
 94         
 95         for(int i=1;i<=3;i++)
 96         {
 97             //实例化中ViewPager中要显示的图片控件
 98             imageView = new ImageView(getApplicationContext());
 99             //设置图片格式
100             imageView.setScaleType(ScaleType.CENTER_CROP);
101             imageView.setImageResource(image[i-1]);
102             views.add(imageView);
103             
104             
105             //实例化导航图标
106             navImage = new ImageView(getApplicationContext());
107             
108             //对应每个页面(即红黄蓝图片),设置一个导航图标
109             if(i==1)//默认导航在第一个页面
110                 navImage.setImageResource(R.drawable.page_now);
111             else
112                 navImage.setImageResource(R.drawable.page);
113             //给每个导航图标设置一个标签,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2
114             navImage.setTag(i-1);
115             //将导航图标的ImageView控件添加到其父容器中 ,即LinearLayout中
116             linearLayout.addView(navImage,layoutParams);
117             //设置导航图片的点击事件
118             navImage.setOnClickListener(new OnClickListener() {
119                 
120                 @Override
121                 public void onClick(View v) {
122                     // TODO Auto-generated method stub
123                     //得到导航图标的位置,显示对应的页面
124                     int position = (Integer) v.getTag();
125                     viewPager.setCurrentItem(position);//注意下标从0开始
126                 }
127             });
128             
129         }
130         //实例化适配器
131         adapter = new MyPagerAdapter();
132         //设置适配器
133         
134         viewPager.setAdapter(adapter);
135         //设置移除UI的间隔大小,默认为1
136 //        viewPager.setOffscreenPageLimit(3);
137         
138     }
139     
140     
141     //选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置)
142     public void selectNavImage(int position)
143     {
144         ImageView navImage = null;
145         //遍历导航布局中所有的子控件,判断子控件的位置是否为选择位置,
146         for(int i=0;i<linearLayout.getChildCount();i++)
147         {
148             navImage = (ImageView) linearLayout.getChildAt(i);
149             if(i==position)
150                 navImage.setImageResource(R.drawable.page_now);
151             else 
152                 navImage.setImageResource(R.drawable.page);
153         }
154     }
155     
156     //声明PagerAdapter子类,用于管理ViewPager中显示的View控件
157     class MyPagerAdapter extends PagerAdapter
158     {
159 
160         @Override
161         public int getCount() {
162             // TODO Auto-generated method stub
163             return views.size();
164         }
165 
166         //判断当前显示的UI对象是否和数据对象一致
167         @Override
168         public boolean isViewFromObject(View arg0, Object arg1) {
169             // TODO Auto-generated method stub
170             return arg0 == arg1;
171         }
172         
173         @Override
174         public Object instantiateItem(ViewGroup container, int position) {
175             //获得指定位置的View,并增加到ViewPager中,同时作为当前页面的数据返回
176             container.addView(views.get(position));
177             return views.get(position);
178             
179         }
180         
181         @Override
182         public void destroyItem(ViewGroup container, int position, Object object) {
183             //当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,是则将当前页面移除
184             container.removeView(views.get(position));
185         }
186         
187         
188     }
189     
190     
191     @Override
192     public boolean onCreateOptionsMenu(Menu menu) {
193         // Inflate the menu; this adds items to the action bar if it is present.
194         getMenuInflater().inflate(R.menu.main, menu);
195         return true;
196     }
197 
198 }
MainActivity.java

 

六、实现ViewPager+Fragment效果

之前写过,就不再写了,直接给以前的链接吧

安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

 

七、实现ActionBar+ViewPager+Fragment效果

先看下效果图:

 

这里使用Fragment作为ViewPager的View 实现与ActionBarTab的联合使用

思路:

1、创建四个fragment作为ViewPager的子View

2、创建四个ActionBarTab作为分栏

3、实现ActionBarTab 的 setCurrentItem(int position)方法控制ViewPager页面的跟随变化

     实现selectTab(int position)方法 控制ActionBarTab的跟随变化

注意。全部都要导v4包,因为Fragment和ViewPager共同使用的适配器 为v4包下的,需要实现包统一

注意FragmentStatePagerAdapter 适配器和 FragmentPagerAdapter适配器的区别

 

adapter = new MyFragmentAdapter(getSupportFragmentManager()); 注意这一句话,一定要使类继承FragmentActivity  否则会报错

代码很简单,注释很清楚

  1 package com.example.viewpagerfragment;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import android.app.ActionBar;
  7 import android.app.ActionBar.Tab;
  8 import android.app.ActionBar.TabListener;
  9 import android.app.Activity;
 10 import android.app.FragmentTransaction;
 11 import android.os.Bundle;
 12 import android.support.v4.app.Fragment;
 13 import android.support.v4.app.FragmentActivity;
 14 import android.support.v4.app.FragmentManager;
 15 import android.support.v4.app.FragmentPagerAdapter;
 16 import android.support.v4.view.ViewPager;
 17 import android.support.v4.view.ViewPager.OnPageChangeListener;
 18 import android.view.Menu;
 19 
 20 public class MainActivity extends FragmentActivity implements TabListener {
 21 
 22     private List<Fragment> fragmentData;
 23     private MyFragmentAdapter myadapter;
 24     private ViewPager viewPager;
 25     private ActionBar actionBar;
 26     
 27     @Override
 28     protected void onCreate(Bundle savedInstanceState) {
 29         super.onCreate(savedInstanceState);
 30         setContentView(R.layout.activity_main);
 31         
 32          viewPager = (ViewPager) findViewById(R.id.viewPager);
 33         //创建Fragment对象
 34         initFragment();
 35         
 36         initActionBar();
 37         
 38         initEvent();
 39         
 40     }
 41 
 42     private void initEvent() {
 43         // TODO Auto-generated method stub
 44         viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 45             @Override
 46             public void onPageSelected(int arg0) {
 47                 // TODO Auto-generated method stub
 48                 //当ViewPager滑动的时候,实现ActionBarTab跟随变化
 49                 actionBar.selectTab(actionBar.getTabAt(arg0));
 50             }
 51             
 52             @Override
 53             public void onPageScrolled(int arg0, float arg1, int arg2) {
 54                 // TODO Auto-generated method stub
 55                 
 56             }
 57             
 58             @Override
 59             public void onPageScrollStateChanged(int arg0) {
 60                 // TODO Auto-generated method stub
 61                 
 62             }
 63         });
 64     }
 65 
 66     private void initActionBar() {
 67         actionBar = getActionBar();
 68         //设置ActionBar的类型为Tab
 69         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 70         //添加ActionBarTab
 71         actionBar.addTab(actionBar.newTab().setText("热点").setTabListener(this));
 72         actionBar.addTab(actionBar.newTab().setText("国内").setTabListener(this));
 73         actionBar.addTab(actionBar.newTab().setText("国际").setTabListener(this));
 74         actionBar.addTab(actionBar.newTab().setText("娱乐").setTabListener(this));
 75         
 76         
 77     }
 78 
 79     private void initFragment() {
 80         //实例化存放fragment的集合
 81         fragmentData = new ArrayList<Fragment>();
 82         fragmentData.add(MyFragment.newMyFagment("热点"));
 83         fragmentData.add(MyFragment.newMyFagment("国内"));
 84         fragmentData.add(MyFragment.newMyFagment("国际"));
 85         fragmentData.add(MyFragment.newMyFagment("娱乐"));
 86         
 87         //实例化适配器
 88         myadapter = new MyFragmentAdapter(getSupportFragmentManager());
 89         viewPager.setAdapter(myadapter);
 90     }
 91 
 92     @Override
 93     public boolean onCreateOptionsMenu(Menu menu) {
 94         // Inflate the menu; this adds items to the action bar if it is present.
 95         getMenuInflater().inflate(R.menu.main, menu);
 96         return true;
 97     }
 98 
 99     
100 
101         
102     
103     @Override
104     public void onTabReselected(Tab tab, FragmentTransaction ft) {
105         // TODO Auto-generated method stub
106         
107     }
108 
109     @Override
110     public void onTabSelected(Tab tab, FragmentTransaction ft) {
111         //当选择ActionBarTab的时候执行viewPager跳转相应的页面
112         viewPager.setCurrentItem(tab.getPosition());
113     }
114 
115     @Override
116     public void onTabUnselected(Tab tab, FragmentTransaction ft) {
117         // TODO Auto-generated method stub
118         
119     }
120     //自定义适配器继承FragmentPagerAdapter
121     class MyFragmentAdapter extends FragmentPagerAdapter{
122 
123         public MyFragmentAdapter(FragmentManager fm) {
124             super(fm);
125             // TODO Auto-generated constructor stub
126         }
127 
128         @Override
129         public Fragment getItem(int arg0) {
130             // TODO Auto-generated method stub
131             return fragmentData.get(arg0);
132         }
133 
134         @Override
135         public int getCount() {
136             // TODO Auto-generated method stub
137             return fragmentData.size();
138         }
139         
140     }
141 }
MainActivity.java
 1 package com.example.viewpagerfragment;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.os.Bundle;
 7 import android.support.v4.app.ListFragment;
 8 import android.widget.ArrayAdapter;
 9 
10 public class MyFragment extends ListFragment{
11     
12     private ArrayAdapter<String>  adapter; 
13     public static MyFragment newMyFagment(String title)
14     {
15         MyFragment mf = new MyFragment();
16         Bundle bundle = new Bundle();
17         bundle.putString("title", title);
18         mf.setArguments(bundle);
19         return mf;
20     }
21     
22     @Override
23     public void onCreate(Bundle savedInstanceState) {
24         // TODO Auto-generated method stub
25         super.onCreate(savedInstanceState);
26         String title = getArguments().getString("title");
27         adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
28         for(int i=0;i<20;i++)
29         {
30             adapter.add(title+" "+i);
31         }
32     }
33     
34     @Override
35     public void onActivityCreated(Bundle savedInstanceState) {
36         // TODO Auto-generated method stub
37         super.onActivityCreated(savedInstanceState);
38         setListAdapter(adapter);
39     }
40     
41 
42 }
MyFragment.java
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <android.support.v4.view.ViewPager
12         android:layout_width="match_parent"
13         android:layout_height="match_parent"
14         android:id="@+id/viewPager"
15         >
16         
17     </android.support.v4.view.ViewPager>
18 </RelativeLayout>
activity_main.xml

 

相关文章
|
5天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
10天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
12天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
14天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
12天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
13天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
24 2
|
14天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
Android开发 容器
Android小技巧之无限循环的ViewPager
前言 之所以会写着篇文章的原因是我现在项目用运用到了广告轮播(BannerView),当时在赶项目的时候在github上面找到了符合的开 源库 就直接引用了,但是该开源库稍微有点庞大,功能比较繁多。
1198 0