Android viewpager中动态添加view并实现伪无限循环的方法

时间:2021-11-16 14:18:09

本文实例讲述了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 viewpager中动态添加view并实现伪无限循环的方法

希望本文所述对大家android程序设计有所帮助。