此demo实现在添加动态添加View按钮时给ViewPager动态添加一个页面 实现方式比较简单 如果想滑动动态添加 在OnPageChangedListener里面实现 实现方式雷同 好了废话就不多少 直接上懂重点 这里面最为关键的是pagerAdapter
- 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 % size));
- }
- @Override
- public void finishUpdate(View arg0) {
- }
- @Override
- public Object instantiateItem(View arg0, int arg1) {// 返回view对象
- try {
- ((ViewPager) arg0).addView(listViews.get(arg1 % size), 0);
- } catch (Exception e) {
- Log.e("zhou", "exception:" + e.getMessage());
- }
- return listViews.get(arg1 % size);
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- return arg0 == arg1;
- }
- }
然后就是页面监听器
- /**
- * 页面监听事件
- */
- private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {
- public void onPageSelected(int arg0) {// 页面选择响应函数
- // 如果需要实现页面滑动时动态添加 请在此判断arg0的值
- // 当然此方式在必须在初始化ViewPager的时候给的页数必须>2
- // 因为给1页的话 ViewPager是响应不了此函数的
- // 例:
- System.out.println("================"+arg0);
- 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) {// 滑动状态改变
- }
- };
然后就是添加的view对象
- /**
- * listViews添加view对象
- *
- * @param count
- */
- private void initListViews(int count) {
- if (listViews == null)
- listViews = new ArrayList<View>();
- TextView mTextView = new TextView(this);// 构造textView对象
- mTextView.setText("第" + count + "页");// 设置文字
- // 设置布局
- mTextView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
- LayoutParams.MATCH_PARENT));
- // 设置位置
- mTextView.setGravity(Gravity.CENTER);
- listViews.add(mTextView);// 添加view
- }
oncreate方法里面
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button button = (Button) findViewById(R.id.button);// 点击为Viewpager添加View对象
- button.setOnClickListener(new View.OnClickListener() {// 设置监听
- public void onClick(View v) {
- count++;
- initListViews(count);// listViews添加数据
- adapter.setListViews(listViews);// 重构adapter对象
- adapter.notifyDataSetChanged();// 刷新
- }
- });//
- initListViews(count);// 添加View对象
- pager = (ViewPager) findViewById(R.id.viewpager);// 找到ViewPager
- pager.setOnPageChangeListener(pageChangeListener);// 设置页面滑动监听
- // initListViews(count);//
- adapter = new MyPageAdapter(listViews);// 构造adapter
- pager.setAdapter(adapter);// 设置适配器
- }