3
當我在ViewPager中打開一個頁面時,它實例化相鄰頁面。我想實現的是在ViewPager中按需加載內容
1.只有當頁面焦點時才加載頁面的內容。
2.顯示加載屏幕,同時我填充焦點的頁面佈局,然後用頁面佈局替換加載屏幕。
有人能指出我正確的方向來實現這兩個功能嗎?
當我在ViewPager中打開一個頁面時,它實例化相鄰頁面。我想實現的是在ViewPager中按需加載內容
1.只有當頁面焦點時才加載頁面的內容。
2.顯示加載屏幕,同時我填充焦點的頁面佈局,然後用頁面佈局替換加載屏幕。
有人能指出我正確的方向來實現這兩個功能嗎?
我不確定是否有解決您的第一個問題的好方法(我不相信您可以控制哪些頁面被加載,並且以何種順序),但我有一些可以幫助您的第二個問題:
這裏是我創建的在我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);
}
沒有這個過程中發生的每次頁面實例化的時間?如果是的話,我怎麼能在加載一次後避免它? –
是的,但它似乎不成問題。我在加載後將數據緩存在HashMap中,因此如果它不存在於緩存中,它不需要重新加載它,因此它不會調用AsyncTask。它仍然會顯示loadingMessage佈局,直到articleContent視圖被填充,但我從來沒有在實踐中看到它。由於ViewPager在屏幕外加載,我唯一看到加載消息的時間是我快速瀏覽視圖的時間。 –
@EricBrynsvold:請您詳細說明您的適配器的代碼。我沒有得到何時執行AsyncTask方法。感謝提前。 –