亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅在片段可見時調用 onCreateView?

如何僅在片段可見時調用 onCreateView?

慕姐8265434 2022-05-25 16:27:44
我正在使用帶有 5 個片段的ViewPager,我的問題是當第一個片段可見時,它已經加載了第二個片段。我讀了一些關于viewPager.setOffscreenPageLimit();但默認值是“1”并且不能設置為“0”的東西,因為ViewPager需要這個用于滑動動畫。所以默認情況下總是會加載第二個片段。但我的問題是我在兩個片段中都有一個全局 Arraylist,每個片段中加載了不同的值,當我在片段一上時,這些值被覆蓋,因為第二個片段被調用。當每個片段對用戶可見時,如何只為每個片段調用 onCreateView?
查看完整描述

3 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

首先,我不會使用全局列表。如果您需要保存類似類型的列表,請創建一個 baseFragment。如果您的目標是在片段之間共享過濾,那么只需將應用的過濾器傳遞給每個片段,以便它知道如何在加載或傳遞列表時管理其列表,但不要使用只是自找麻煩的全局。

其次,onCreate 是故意在尋呼機上調用的,因此您可以在它顯示在屏幕上之前預加載一些內容。這是為了在用戶左右滑動時提高渲染性能。如果你在滑動發生時加載,它會變得很糟糕而且很糟糕。

最后考慮將您的邏輯移至 onResume,除非您有充分的理由不這樣做。如果這對您不起作用,則監視頁面更改事件并調用您在每個 baseFragment 上創建的共享“加載”方法,您可以在那里簡單地調用和處理您的代碼。


查看完整回答
反對 回復 2022-05-25
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

即使您將 setOffscreenPageLimit 設置為 0,View pager 也會加載附近的片段。因為如果該值小于 1,它們會將其設置為 1。


所以 onCreate, onCreateView... onResume 附近的片段會在它可見之前被調用。


所以只需在setUserVisibleHint中加載您的數據。


@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

    super.setUserVisibleHint(isVisibleToUser);

    if(getView() != null && isVisibleToUser){

        loadData();

    }

}

但是存在一個問題。這個方法(setUserVisibleHint)將在我們的片段的 onCreate 之前被調用。


如果您從參數中獲取數據.. 我們將從片段的 onCreate 或 onCreateView 獲取這些數據。因此,第一個可見片段的 setUserVisibleHint 將被調用,無需加載數據(上述方法中的getView() != null )。為此,我們可以使用


 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = super.onCreateView(inflater,container,savedInstanceState);


    // This is because for the first fragment to loadData, since the 

    // setUserVisibleHint is called before the onCreateView of the fragment.


    if(getUserVisibleHint()){

        loadData();

    }


    return view;

}

loadData是我的片段的數據綁定部分的方法。


通過這樣做,對于第一個可見片段 loadData 將從 onCreateView 調用,而在片段附近,它將從 setUserVisibleHint 調用。


查看完整回答
反對 回復 2022-05-25
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

通過使用它,您可以嘗試一下,


@Override

    public void setUserVisibleHint(boolean isVisibleToUser) {

}


查看完整回答
反對 回復 2022-05-25
  • 3 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號