本文实例讲述了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程序设计有所帮助。