3

ViewPager でページを開くと、隣接するページがインスタンス化されます。私が達成したいことは

1.ページがフォーカスされている場合にのみページのコンテンツをロードします。

2.ロード画面を表示し、フォーカスされているページレイアウトを作成し、その後ロード画面をページレイアウトに置き換えます。

これら2つの機能を達成するために誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

3

最初の質問を解決する良い方法がわかりません (どのページをどの順序でロードするかを制御できるとは思いません) が、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 には 2 つの要素がネストされています。読み込み中のメッセージ (ProgressBar と TextView を含む) を表す LinearLayout と、読み込まれたコンテンツを保持する WebView です。WebView は、完全に非表示にするために、最初は可視性が GONE に設定されています。コードでは、ビューを拡張し、AsyncTask を開始してデータを読み込みます。データが読み込まれたら、LinearLayout の可視性を GONE に設定し、WebView の可視性を VISIBLE に設定します。

AsyncTask の onPostExecute - データが読み込まれた後、読み込みメッセージを非表示にしてデータを表示します

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

}
于 2011-09-12T20:21:58.460 に答える