此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);// 設置適配器
- }