2015-04-23 81 views
-2

我使用ViewPagerActivity帶有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進行大量查詢。它能以其他方式最小化嗎?

+0

您應該緩存您檢索的數據,而不是每次Fragment加載時訪問互聯網。除非您希望數據在每次加載時都發生更改。您似乎希望數據只能手動刷新,所以沒有理由不能至少將返回的數據轉儲到SharedPreference中以便稍後加載。 – Knossos

+0

@Downvoter:謹慎解釋downvote? – ashutosh

+0

@Knossos如果數據隨着時間而增加會怎樣。把它想象成一個儀表板或Facebook Wall。在這種情況下,我認爲緩存儀表板的某個部分就足夠了。 – ashutosh

回答

0

在此link你可以找到其實你必須這樣做,你的問題 的解釋:

加入這個方法:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("curChoice", mCurCheckPosition); 
} 

,你以後可以使用這樣的:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) { 
      // Restore last state for checked position. 
      mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
     } 
} 

希望它有效。

+0

我的問題需要保存整個片段數據的策略,而不是一次又一次地從api中獲取它。如何保存列表位置對我有幫助? – ashutosh

+0

嘗試使用凌空庫 它由谷歌 1.請求排隊和優先 2.有效的請求,高速緩存和內存管理 3.可擴展性和庫的定製開發我們的需求 4.取消請求 這裏是一個很好的教程開始:http://www.androidhive.info/2014/05/android-working-with-volley-library-1/ – Fakher