1. 程式人生 > >Android 無限輪播圖空白問題(不是針對1張或者2張圖片的情況)

Android 無限輪播圖空白問題(不是針對1張或者2張圖片的情況)

  1. 前序
    大家常說,無圖言luan,今天的的確沒有截圖,主要是分享下自己在“無限輪播圖上遇到的問題”,望各位老鐵見諒

  2. 問題描述
    主頁面上有四個Fragment,類似於微信上的頁面佈局,有個fragment為首頁(fragment),這裡有個廣告圖無限輪播。問題出現:當切換到其他fragment上或者進入到新的Activity回來後,發現輪播上顯示的是空白的圖片(輪播圖只有三張)

    相信很多老鐵在做無限輪播圖的時候PagerAdapter寫的類似下面的程式碼吧,緊接著viewpager.setCurrentItem((Integer.MAX_VALUE >> 1) - (Integer.MAX_VALUE >> 1) % views.size());//這句程式碼是設定為Integer.MAX_VALUE一半的附近值,根據position可以設定是第一張圖片,第一個小圓點

public class MyPagerAdapter extends PagerAdapter {

    private List<View> lists;

    public MyPagerAdapter (List<View> lists) {
        this.lists = lists;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject
(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { if (container.getChildCount() == lists.size()) { container.removeView(lists.get(position % lists.size())); } container.addView(lists.get(position % lists.size()), 0
); return lists.get(position % lists.size()); } @Override public void destroyItem(ViewGroup container, int position, Object object) { } }

然後結合Viewpager的PageSelectedListener,使用handler去發訊息

3.問題解決
根據問題描述,查詢問題,發現問題是出現在首頁fragment不可見時(切換到其它fragment或者進入新的頁面),沒有移除掉handler輪循,具體Viewpager的什麼機制導致還未去研究,各位老鐵有時間可以研究下
解決方法:重寫Fragment中的setUserVisibleHint,其中引數isVisibleToUser為true時是當前fragment可見時,移除輪循和恢復輪循便可解決問題

解決程式碼如下:

  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if (pagerViewUtil == null) {
            return;
        }

        if (isVisibleToUser) {
            //fragment可見時恢復輪播圖滾動
            pagerViewUtil.startScroll();
            return;
        }

        //fragment不可見時停止輪播圖滾動
        pagerViewUtil.stopScroll();
    }

希望這篇文章能幫助到你,同時也希望大神們提出更好的解決方式或者指出本人在這篇文章理解上的錯誤,小弟感激不盡