3 回答

TA貢獻1826條經驗 獲得超6個贊
首先,我不會使用全局列表。如果您需要保存類似類型的列表,請創建一個 baseFragment。如果您的目標是在片段之間共享過濾,那么只需將應用的過濾器傳遞給每個片段,以便它知道如何在加載或傳遞列表時管理其列表,但不要使用只是自找麻煩的全局。
其次,onCreate 是故意在尋呼機上調用的,因此您可以在它顯示在屏幕上之前預加載一些內容。這是為了在用戶左右滑動時提高渲染性能。如果你在滑動發生時加載,它會變得很糟糕而且很糟糕。
最后考慮將您的邏輯移至 onResume,除非您有充分的理由不這樣做。如果這對您不起作用,則監視頁面更改事件并調用您在每個 baseFragment 上創建的共享“加載”方法,您可以在那里簡單地調用和處理您的代碼。

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 調用。

TA貢獻1847條經驗 獲得超7個贊
通過使用它,您可以嘗試一下,
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
}
添加回答
舉報