オンラインから取得したデータを表示するリストビューを使用したアクティビティがあります。リストビューを表示する前に、途中に進行状況インジケーターがあります。アクティビティは、リストビューが非表示で進行状況インジケーターが表示された状態から始まります。必要に応じて一方を非表示にし、もう一方を表示します。それらは互いの上にあるフレームレイアウトにあります。必要に応じて、リストビューの代わりにエラーメッセージを含むテキストビューを表示する可能性を追加したいと思います。2 つのビューを非表示にして、変更するたびに目的のビューを表示するよりも、これを行うためのよりクリーンな方法はありますか?
4 に答える
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
、返されたデータの長さJSONArray
が0かどうかを確認します。
例えば:
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() == 0
がTextView
表示され、代わりに が表示されます。ListView
ViewSwitcher を使用できます。そこにいくつかのビューを追加し、それらを順番に表示して、showNext() を呼び出します。
まともな解決策を見つけました。提案された 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)));
子ビューが多すぎない場合は、ハードコードされたインデックスも使用できます。
AdapterView オブジェクトでいつでも AdapterView.setEmptyView(View v) を呼び出して、空のビューとして使用するビューをアタッチできます。
スニペットは次のとおりです。
empty = (TextView)findViewById(R.id.empty1);
list = (ListView)findViewById(R.id.list1);
list.setEmptyView(empty);
ListView と TextView を同じ親内に保持してください。
詳細な説明については、これを参照してください