viewpager嵌套Fragment懶加載

由於viewpager有預加載功能,所以有時候相鄰的fragment加載大量數據的時候會卡頓,oom等,所以我們想要的效果就是viewpager顯示那個fragment就加載那個,這樣我們就用到了一個方法,具體代碼如下:

 private boolean isCreate;
@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        //super千萬不能刪,要不然不起作用
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && isCreate) {
            getData();
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //調用此方法的時候表示佈局已加載,這時候吧isCreate 設爲true
        //表示控件佈局已加載完成,此時加載數據就不會空指針啦
        //最好在這裏調用,如果在oncreate中調用,那麼第一頁會調用兩次加載數的方法,分別是:setUserVisibleHint和onActivityCreated
        isCreate = true;
        if (myView == null)
            myView = inflater.inflate(R.layout.fragment_home_home, null);
        ViewGroup parent = (ViewGroup) myView.getParent();
        if (parent != null)
            parent.removeView(myView);
        return myView;
    }
 public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        this.init();   //控件初始化
        //由於setUserVisibleHint在onCreateView之前就調用啦
        //所以,viewpager的第一頁的時候是無法調用數據的,所以在   //這加一個加載數據的調用
        if (getUserVisibleHint()) {
            this.getData(); //得到數據
        }
        this.SomeThingListener(); //一些監聽事件
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章