2011-09-12 47 views
3

當我在ViewPager中打開一個頁面時,它實例化相鄰頁面。我想實現的是在ViewPager中按需加載內容

1.只有當頁面焦點時才加載頁面的內容。

2.顯示加載屏幕,同時我填充焦點的頁面佈局,然後用頁面佈局替換加載屏幕。

有人能指出我正確的方向來實現這兩個功能嗎?

回答

3

我不確定是否有解決您的第一個問題的好方法(我不相信您可以控制哪些頁面被加載,並且以何種順序),但我有一些可以幫助您的第二個問題:

這裏是我創建的在我ViewPager的每個視圖加載的視圖的一個實例:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"> 
    <LinearLayout 
     android:id="@+id/loading_message" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <ProgressBar 
      style="@style/GenericProgressIndicator"/> 
     <TextView 
      android:id="@+id/loading_message_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/loading_message_text"/> 
    </LinearLayout> 
    <WebView 
     android:id="@+id/webview" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:fadingEdge="vertical" 
     android:visibility="gone" 
     /> 
</RelativeLayout> 

有嵌套在RelativeLayout的兩個元素:表示我的加載消息(包括一個進度條和一個的LinearLayout一個TextView)和一個WebView,一旦它被加載,它就會保存我的內容。 WebView最初將其可見性設置爲「完成」以完全隱藏它。在代碼中,我膨脹視圖並啓動一個AsyncTask來加載我的數據。加載數據後,我將LinearLayout的可見性設置爲GONE,並將WebView的可見性設置爲可見。

onPostExecute在我的AsyncTask - 數據被加載後,隱藏加載信息,並顯示數據

protected void onPostExecute(Void v) 
{ 
    LinearLayout loadingMessage = (LinearLayout)articleLayout.findViewById(R.loading_message); 
    WebView articleContent = (WebView)articleLayout.findViewById(R.id.webview); 

    [...] 
    loadingMessage.setVisibility(View.GONE); 
    articleContent.setVisibility(View.VISIBLE); 

} 
+0

沒有這個過程中發生的每次頁面實例化的時間?如果是的話,我怎麼能在加載一次後避免它? –

+0

是的,但它似乎不成問題。我在加載後將數據緩存在HashMap中,因此如果它不存在於緩存中,它不需要重新加載它,因此它不會調用AsyncTask。它仍然會顯示loadingMessage佈局,直到articleContent視圖被填充,但我從來沒有在實踐中看到它。由於ViewPager在屏幕外加載,我唯一看到加載消息的時間是我快速瀏覽視圖的時間。 –

+0

@EricBrynsvold:請您詳細說明您的適配器的代碼。我沒有得到何時執行AsyncTask方法。感謝提前。 –