日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用ViewPager加载页面出现空白

發布時間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ViewPager加载页面出现空白 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:http://blog.csdn.net/zjf1165/article/details/51076642

首次啟動程序時首頁空白,切換頁面后正常

為了便于管理,通常為ViewPager的每個子頁面建立一個基類,然后用一個集合(一般用ArrayList)承載該ViewPager的所有子頁面,然而在該基類的構造方法中一般引用initView()方法,使得某個子類在new的時候就創建視圖,而在pageradapter中的

public Object instantiateItem(ViewGroup container, int position) { }

方法中一般也會調用基類的initView()方法添加將要展示界面,錯誤出現:

即使在其他地方改變ViewPager中子頁面的顯示也無法將其展示出來,即出現空白現象
事例代碼(智慧北京項目):

viewPager.setAdapter(new MyPagerAdapter(baseContentPagerList)); /* *初始化首頁數據 *baseContentPagerList為承載每個子頁面的ArrayList */ baseContentPagerList.get(0).initData();

此時的首頁界面如下:

明明調用initData()方法為該頁面添加數據可首頁依然空白

出現的原因:

兩次調用initView方法(基類和instantiateItem方法)引起的,即:

  • new一個子類時,已經調用initView方法(此時是間接調用基類initView方法,由于多態的存在真正調用的是相應的子類),創建第一個視圖對象
  • 給ViewPager設置adapter時,由于java的特性,adapter中的方法體還沒有真正調用,因為只有在執行是才會真正調用
  • 此時調用baseContentPagerList.get(0).initData()方法時,實際上是給 第一個視圖對象添加數據
  • 然而啟動程序是,ViewPager首先會加載兩個頁面,而此時加載 首頁時,第二次調用initView方法產生第二個視圖對象,且顯示的是該視圖,第一個視圖對象雖有數據卻被第二個視圖“覆蓋”,故顯示的是第二個沒有數據的視圖,因此出現空白,滑動后正常。
  • 改正做法

    在基類中添加getView( )方法,并讓每個子類實現。構造方法和以前一樣引用initView方法,不然給首頁初始化數據時會出現:為null的對象賦值的錯誤
    在pageradapter的instantiateItem方法中調用getView方法

    setCurrentItem 表示切換當前的ViewPager到指定界面,因為ViewPager有緩存和回收機制,也就是說,默認情況下ViewPager只會創建三個界面,因此跳過三個界面的時候,需要重新創建,所以導致空白,解決方案就是:

    viewPager.setOffscreenPageLimit(4); 表示四個界面來回切換不會重新創建,就會不出現空白了。

    總結

    以上是生活随笔為你收集整理的使用ViewPager加载页面出现空白的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。