android Viewpager 動態添加載滑動

此demo實現在添加動態添加View按鈕時給ViewPager動態添加一個頁面 實現方式比較簡單 如果想滑動動態添加 在OnPageChangedListener裏面實現 實現方式雷同  好了廢話就不多少  直接上懂重點  這裏面最爲關鍵的是pagerAdapter

[java] view plaincopy
  1. class MyPageAdapter extends PagerAdapter {  
  2.   
  3.         private ArrayList<View> listViews;// content  
  4.   
  5.         private int size;// 頁數  
  6.   
  7.         public MyPageAdapter(ArrayList<View> listViews) {// 構造函數  
  8.                                                             // 初始化viewpager的時候給的一個頁面  
  9.             this.listViews = listViews;  
  10.             size = listViews == null ? 0 : listViews.size();  
  11.         }  
  12.   
  13.         public void setListViews(ArrayList<View> listViews) {// 自己寫的一個方法用來添加數據  這個可是重點啊  
  14.             this.listViews = listViews;  
  15.             size = listViews == null ? 0 : listViews.size();  
  16.         }  
  17.   
  18.         @Override  
  19.         public int getCount() {// 返回數量  
  20.             return size;  
  21.         }  
  22.   
  23.         @Override  
  24.         public void destroyItem(View arg0, int arg1, Object arg2) {// 銷燬view對象  
  25.             ((ViewPager) arg0).removeView(listViews.get(arg1 % size));  
  26.         }  
  27.   
  28.         @Override  
  29.         public void finishUpdate(View arg0) {  
  30.         }  
  31.   
  32.         @Override  
  33.         public Object instantiateItem(View arg0, int arg1) {// 返回view對象  
  34.             try {  
  35.                 ((ViewPager) arg0).addView(listViews.get(arg1 % size), 0);  
  36.             } catch (Exception e) {  
  37.                 Log.e("zhou""exception:" + e.getMessage());  
  38.             }  
  39.             return listViews.get(arg1 % size);  
  40.         }  
  41.   
  42.         @Override  
  43.         public boolean isViewFromObject(View arg0, Object arg1) {  
  44.             return arg0 == arg1;  
  45.         }  
  46.   
  47.     }  

然後就是頁面監聽器

[java] view plaincopy
  1. /** 
  2.      * 頁面監聽事件 
  3.      */  
  4.     private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {  
  5.   
  6.         public void onPageSelected(int arg0) {// 頁面選擇響應函數  
  7.         // 如果需要實現頁面滑動時動態添加 請在此判斷arg0的值  
  8.         // 當然此方式在必須在初始化ViewPager的時候給的頁數必須>2  
  9.         // 因爲給1頁的話 ViewPager是響應不了此函數的  
  10.         // 例:  
  11.             System.out.println("================"+arg0);  
  12.             if (arg0 == pager.getAdapter().getCount() - 1) {// 滑動到最後一頁  
  13.                 count++;  
  14.                 initListViews(count);// listViews添加數據  
  15.                 adapter.setListViews(listViews);// 重構adapter對象  這是一個很重要  
  16.                 adapter.notifyDataSetChanged();// 刷新  
  17.             }  
  18.   
  19.             if (mToast == null)  
  20.                 mToast = Toast.makeText(MainActivity.this"翻到了第" + (arg0 + 1)  
  21.                         + "頁"1);  
  22.             else {  
  23.                 mToast.setText("翻到了第" + (arg0 + 1) + "頁");  
  24.             }  
  25.             mToast.show();  
  26.         }  
  27.   
  28.         public void onPageScrolled(int arg0, float arg1, int arg2) {// 滑動中。。。  
  29.   
  30.         }  
  31.   
  32.         public void onPageScrollStateChanged(int arg0) {// 滑動狀態改變  
  33.   
  34.         }  
  35.     };  

然後就是添加的view對象


[java] view plaincopy
  1. /** 
  2.      * listViews添加view對象 
  3.      *  
  4.      * @param count 
  5.      */  
  6.     private void initListViews(int count) {  
  7.         if (listViews == null)  
  8.             listViews = new ArrayList<View>();  
  9.         TextView mTextView = new TextView(this);// 構造textView對象  
  10.         mTextView.setText("第" + count + "頁");// 設置文字  
  11.         // 設置佈局  
  12.         mTextView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,  
  13.                 LayoutParams.MATCH_PARENT));  
  14.         // 設置位置  
  15.         mTextView.setGravity(Gravity.CENTER);  
  16.         listViews.add(mTextView);// 添加view  
  17.     }  

oncreate方法裏面

[java] view plaincopy
  1. @Override  
  2.     public void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         setContentView(R.layout.activity_main);  
  5.   
  6.         Button button = (Button) findViewById(R.id.button);// 點擊爲Viewpager添加View對象  
  7.         button.setOnClickListener(new View.OnClickListener() {// 設置監聽  
  8.   
  9.             public void onClick(View v) {  
  10.                 count++;  
  11.                 initListViews(count);// listViews添加數據  
  12.                 adapter.setListViews(listViews);// 重構adapter對象  
  13.                 adapter.notifyDataSetChanged();// 刷新  
  14.             }  
  15.         });//  
  16.   
  17.         initListViews(count);// 添加View對象  
  18.         pager = (ViewPager) findViewById(R.id.viewpager);// 找到ViewPager  
  19.         pager.setOnPageChangeListener(pageChangeListener);// 設置頁面滑動監聽  
  20. //      initListViews(count);//  
  21.         adapter = new MyPageAdapter(listViews);// 構造adapter  
  22.         pager.setAdapter(adapter);// 設置適配器  
  23.     }  
發佈了33 篇原創文章 · 獲贊 6 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章