Загрузка содержимого по требованию в ViewPager - PullRequest
3 голосов
/ 12 сентября 2011

Когда я открываю страницу в ViewPager, он создает экземпляры соседних страниц.Чего я хотел бы добиться, так это

1. Загружать содержимое страницы только тогда, когда страница находится в фокусе.

2. Показывать экран загрузки, пока я заполняю макет страницы, который включенсфокусируйтесь и замените загрузочный экран на макет страницы после этого.

Может ли кто-нибудь указать мне правильное направление для достижения этих двух функций?

1 Ответ

3 голосов
/ 13 сентября 2011

Я не уверен в хорошем способе решить ваш первый вопрос (я не верю, что вы можете контролировать, какие страницы загружаются и в каком порядке), но у меня есть кое-что, что может помочь для вашего второго:

Вот пример созданного мною представления, которое загружается в каждый вид моего 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, который представляет мое загрузочное сообщение (включая ProgressBar и TextView) и WebView, который будет содержать мое содержимое после его загрузки. Первоначально для WebView было установлено значение GONE, чтобы полностью скрыть его. В коде я раздуваю представление и запускаю AsyncTask для загрузки моих данных. Как только данные загружены, я установил видимость LinearLayout на GONE, а видимость WebView на VISIBLE.

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);

}
...