安卓开发_深入学习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

 

相关文章
|
6天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
5天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
18 5
|
3天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
5天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
16 3
|
7天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
2天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
18 0
|
12天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【10月更文挑战第22天】在安卓应用的海洋中,如何让你的应用脱颖而出?一个独特且直观的用户界面(UI)至关重要。本文将引导你通过自定义视图来打造个性化的用户体验,从基础的视图绘制到触摸事件的处理,我们将一步步深入探讨。准备好了吗?让我们开始吧!
|
6月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
398 1
|
3月前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
3月前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
69 5