动态添加ViewPager的View

http://blog.csdn.net/lihonghao1017/article/details/10108907(转)


最近做一个项目,要求初始ViewPager一共3页,当滑到第三页的时候在加载三页,也就是一共有6页了,然后依次类推,每次加载3页;

效果图:


逻辑代码:

public class MainActivity extends Activity {
private ArrayList<View> listViews;
private ViewPager pager;
private int count = 1;
private LayoutInflater inflater;
private MyPageAdapter adapter;
private int pagerCount=1;


private Toast mToast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        listViews=new ArrayList<Fragment>();
        pager=(ViewPager) findViewById(R.id.viewpager);
        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    pager.setOnPageChangeListener(pageChangeListener);// 设置页面滑动监听
initListViews(count);// 添加View对象
adapter = new MyPageAdapter(listViews);// 构造adapter
pager.setAdapter(adapter);// 设置适配器
    }


    /**
* listViews添加view对象

* @param count
*/
private void initListViews(int count) {
if (listViews == null)
listViews = new ArrayList<View>();
for (int i = 0; i < 3; i++) {

View mTextView = inflater.inflate(R.layout.myfragment0, null);// 构造textView对象
TextView tv01=(TextView) mTextView.findViewById(R.id.textView1);
TextView tv02=(TextView) mTextView.findViewById(R.id.textView2);
tv01.setText("第"+pagerCount+"页");
tv02.setText("第" + count + "次更新");// 设置文字
// 设置布局
// mTextView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
// LayoutParams.MATCH_PARENT));
// 设置位置
tv02.setGravity(Gravity.CENTER);
listViews.add(mTextView);// 添加view
pagerCount++;
}
}
/**
* 页面监听事件
*/
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {


public void onPageSelected(int arg0) {// 页面选择响应函数
// 如果需要实现页面滑动时动态添加 请在此判断arg0的值
   // 当然此方式在必须在初始化ViewPager的时候给的页数必须>2
// 因为给1页的话 ViewPager是响应不了此函数的
// 例:
if (arg0 == pager.getAdapter().getCount() - 1) {// 滑动到最后一页
count++;
initListViews(count);// listViews添加数据
adapter.setListViews(listViews);// 重构adapter对象
adapter.notifyDataSetChanged();// 刷新
}


if (mToast == null)
mToast = Toast.makeText(MainActivity.this, "翻到了第" + (arg0 + 1)
+ "页", 1);
else {
mToast.setText("翻到了第" + (arg0 + 1) + "页");
}
mToast.show();
}


public void onPageScrolled(int arg0, float arg1, int arg2) {// 滑动中。。。


}


public void onPageScrollStateChanged(int arg0) {// 滑动状态改变


}
};
/**
* ViewPager适配器

* @author zhou

*/
class MyPageAdapter extends PagerAdapter {


private ArrayList<View> listViews;// content


private int size;// 页数


public MyPageAdapter(ArrayList<View> listViews) {// 构造函数
// 初始化viewpager的时候给的一个页面
this.listViews = listViews;
size = listViews == null ? 0 : listViews.size();
}


public void setListViews(ArrayList<View> listViews) {// 自己写的一个方法用来添加数据
this.listViews = listViews;
size = listViews == null ? 0 : listViews.size();
}


@Override
public int getCount() {// 返回数量
return size;
}


@Override
public void destroyItem(View arg0, int arg1, Object arg2) {// 销毁view对象
((ViewPager) arg0).removeView(listViews.get(arg1));
}


@Override
public void finishUpdate(View arg0) {
}


@Override
public Object instantiateItem(View arg0, int arg1) {// 返回view对象
try {
((ViewPager) arg0).addView(listViews.get(arg1), 0);
} catch (Exception e) {
Log.e("zhou", "exception:" + e.getMessage());
}
return listViews.get(arg1);
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}


}
}

activity_main.xml布局如下:

<RelativeLayout 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"
    tools:context=".MainActivity" >


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


</RelativeLayout>

myfragment0.xml布局如下:

<?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:background="#ffffff"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical" >


    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@android:color/black"
        />


    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
           android:textColor="@android:color/black"
       />


</LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值