我使用ViewPager
Activity
帶有3個選項卡。每個標籤都有一個Fragment
顯示(可滑動)。對於每個Fragment
,通過rest api從服務器中恢復數據並以卡的形式顯示(使用this library)。因此,我的編碼是這樣的:Android碎片保留內容
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
...
fetch_item1_card1(); //Fetches Data 1 and displays on card 1
fetch_item2_card2(); //Fetches Data 2 and displays on card 2
...
}
這是工作好,直到當我點擊一個按鈕,顯示在新Activity
卡細節(比方說Activity
B)。所以,在按回按鈕時,我被帶到上面提到的Fragment
(使用finish();
),並且再次從api檢索相同的數據。
因此,我認爲只有在Activity
第一次創建時才提取數據。我做這樣的事情實現了這個:
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
...
if(savedInstanceState == null) {
fetch_item1_card1(); //Fetches Data 1 and displays on card 1
fetch_item2_card2(); //Fetches Data 2 and displays on card 2
}
...
}
但現在的問題是,每當我從(使用finish();
)Acitivity
乙回來,該數據是不存在的。我必須通過API手動重新獲取它。
我想從互聯網上獲取數據,顯示它直到用戶手動重新獲取數據。我怎樣才能做到這一點?我可以將代碼保存在savedInstanceState
之外,但這意味着每次用戶從活動中恢復時都會通過API進行大量查詢。它能以其他方式最小化嗎?
您應該緩存您檢索的數據,而不是每次Fragment加載時訪問互聯網。除非您希望數據在每次加載時都發生更改。您似乎希望數據只能手動刷新,所以沒有理由不能至少將返回的數據轉儲到SharedPreference中以便稍後加載。 – Knossos
@Downvoter:謹慎解釋downvote? – ashutosh
@Knossos如果數據隨着時間而增加會怎樣。把它想象成一個儀表板或Facebook Wall。在這種情況下,我認爲緩存儀表板的某個部分就足夠了。 – ashutosh