本文实例讲述了android viewpager中动态添加view并实现伪无限循环的方法。分享给大家供大家参考,具体如下:
viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里有一个需求,就是viewpager里面加载的页数不是确定的,而是根据数据的多少来确定的。常见的应用就是在一个新闻的详细页面中,显示与此新闻有关的图片。
下面我们来看一下代码:
activity_main.xml
1
2
3
4
5
6
7
8
9
|
<relativelayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" > <android.support.v4.view.viewpager android:id= "@+id/list_pager" android:layout_width= "fill_parent" android:layout_height= "150dp" /> </relativelayout> |
fragment_page.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version= "1.0" encoding= "utf-8" ?> <linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:gravity= "center" android:background= "#ffff44" > <textview android:id= "@+id/txt_num" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:text= "1" android:textsize= "22dp" android:gravity= "center" /> </linearlayout> |
viewpageadapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import android.support.v4.view.pageradapter; import android.view.view; import android.view.viewgroup; import java.util.list; /** * created by cg on 2015/10/28. */ public class viewpageadapter extends pageradapter { private list<view> list_view; public viewpageadapter(list<view> list_view) { this .list_view = list_view; } @override public int getcount() { return integer.max_value; } @override public boolean isviewfromobject(view view, object object) { return view==object; } @override public object instantiateitem(viewgroup container, int position) { container.addview(list_view.get(position % list_view.size())); return list_view.get(position % list_view.size()); } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview(list_view.get(position % list_view.size())); } } |
mainactivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import android.os.bundle; import android.support.v4.view.viewpager; import android.support.v7.app.appcompatactivity; import android.view.layoutinflater; import android.view.view; import android.widget.textview; import java.util.arraylist; import java.util.list; /** * 动态在viewpager中添加view,并实现无限循环 */ public class mainactivity extends appcompatactivity { private viewpager list_pager; private list<view> list_view; private viewpageadapter adpter; @override protected void oncreate(bundle savedinstancestate) { super .oncreate(savedinstancestate); setcontentview(r.layout.activity_main); list_pager = (viewpager)findviewbyid(r.id.list_pager); list_view = new arraylist<>(); //这里只设置了4.因为在实现应用中,我们在页面加载的时候,你会根据数据的多少,而知道这个页面的数量 //一般情况下,我们会根据list<>或是string[]这样的数组的数量来判断要有多少页 for ( int i= 0 ;i< 4 ;i++) { view view = layoutinflater.from( this ).inflate(r.layout.fragment_page, null ); textview txt_num = (textview)view.findviewbyid(r.id.txt_num); txt_num.settext(i + "" ); list_view.add(view); } adpter = new viewpageadapter(list_view); list_pager.setadapter(adpter); // 刚开始的时候 吧当前页面是先到最大值的一半 为了循环滑动 int currentitem = integer.max_value / 2 ; // 让第一个当前页是 0 //currentitem = currentitem - ((integer.max_value / 2) % 4); list_pager.setcurrentitem(currentitem); } } |
效果图:
希望本文所述对大家android程序设计有所帮助。