0

オンラインから取得したデータを表示するリストビューを使用したアクティビティがあります。リストビューを表示する前に、途中に進行状況インジケーターがあります。アクティビティは、リストビューが非表示で進行状況インジケーターが表示された状態から始まります。必要に応じて一方を非表示にし、もう一方を表示します。それらは互いの上にあるフレームレイアウトにあります。必要に応じて、リストビューの代わりにエラーメッセージを含むテキストビューを表示する可能性を追加したいと思います。2 つのビューを非表示にして、変更するたびに目的のビューを表示するよりも、これを行うためのよりクリーンな方法はありますか?

4

4 に答える 4

1

ListViewこれは、プログレス バー を含む XML を定義する方法です。

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/linlaHeaderProgress"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:orientation="horizontal"
            android:visibility="gone" >

            <ProgressBar
                android:id="@+id/pbHeaderProgress"
                style="@style/Spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="2dp" >
            </ProgressBar>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="left|center"
                android:padding="2dp"
                android:text="Loading...."
                android:textColor="#F1F1F1"
                android:textSize="20sp" >
            </TextView>
        </LinearLayout>

        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:cacheColorHint="@android:color/transparent"
            android:divider="#000000"
            android:dividerHeight="0dp"
            android:fadingEdge="none"
            android:persistentDrawingCache="scrolling" >
        </ListView>

        <TextView
            android:id="@android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:padding="10dp"
            android:textColor="#f1f1f1"
            android:textSize="15sp"
            android:textStyle="bold"
            android:visibility="gone" >
        </TextView>
    </LinearLayout>

</LinearLayout>

データのActivity取得と表示に使用される で (私の場合は Facebook API)、 でAsyncTask、返されたデータの長さJSONArray0かどうかを確認します。

例えば:

TextView txtEmptyData = (TextView) findViewById(android.R.id.empty);
if (JAFeeds.length() == 0)  {
    txtEmptyData.setVisibility(View.VISIBLE);
else {
    txtEmptyData.setVisibility(View.GONE);

    // DO THE REST OF THE PROCESSING TO FETCH THE REMAINING DATA TO DISPLAY
}

XML の定義方法により、 の場合、length() == 0TextView表示され、代わりに が表示されます。ListView

于 2012-12-02T06:12:06.317 に答える
0

ViewSwitcher を使用できます。そこにいくつかのビューを追加し、それらを順番に表示して、showNext() を呼び出します。

于 2012-12-02T02:34:08.717 に答える
0

まともな解決策を見つけました。提案された ViewSwitcher の代わりに、複数のビューを許可する ViewFlipper を見つけました。また、ビューを切り替えるためのアニメーションを設定することもできます

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/viewFlipper"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

</ViewFlipper>

ビューの切り替えは少し面倒ですが

mViewFlipper.setDisplayedChild(mViewFlipper.indexOfChild(findViewById(R.id.myView)));

子ビューが多すぎない場合は、ハードコードされたインデックスも使用できます。

于 2012-12-02T23:20:21.367 に答える
0

AdapterView オブジェクトでいつでも AdapterView.setEmptyView(View v) を呼び出して、空のビューとして使用するビューをアタッチできます。

スニペットは次のとおりです。

empty = (TextView)findViewById(R.id.empty1);
 list = (ListView)findViewById(R.id.list1);
 list.setEmptyView(empty);

ListView と TextView を同じ親内に保持してください。

詳細な説明については、これを参照してください

于 2012-12-02T05:20:39.287 に答える