3

カスタムアダプターを備えたListViewを使用して、JSON応答を受信し、それを適切なリストに入れています。これはうまく機能します。

現在、さまざまな例外とエラー処理をテストしており、Androidアプリ内のWebAPIから受け取ったエラーをキャッチしています。これはすべてうまく機能し、うまく処理されますが、一度設定すると、ListViewの「空のビュー」を変更する方法を理解できません。

違いが生じる場合は、フラグメント内にありますが、ProgressBarとListViewは、フラグメントで拡張されたXMLレイアウトで定義されています。そこにもエラーテキストを含むTextViewがあります-TextViewonError()のProgressBarを切り替える方法を知りたいです!

編集:現在、ListViewはProgressBarを空のビューとして使用しています-後でこれを別のビューに変更する方法を知りたいです-XML定義またはプログラム。

すべてのAPI呼び出しがAsyncTaskで実行されるため、UIスレッドがロックされていないため、これは問題ではありません。

ListView.removeAllViews()により、かなり差し迫ったクラッシュが発生しました。

これが些細なことならお詫びします...

4

3 に答える 3

4

空のビューをFrameLayoutとして定義し、空の状態をそのビュー内に配置して、他のビューのコンテンツを変更するのと同じように変更することができます。

于 2012-11-18T18:01:57.003 に答える
3

ListViewに2つの空のビューがあります。1つは、データベースまたはサーバーからデータをロードしているときに表示されるProgressBarです。もう1つはTextViewで、エラーが発生したときやデータがないときに表示されます。

ListView、ProgressBar、TextViewをFrameLayoutに配置しました。そして、ProgressBarとTextViewの両方の可視性をGoneに設定します。

    <FrameLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

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

        <TextView 
            android:id="@+id/empty_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="gone"
            android:text="@string/no_contacts_found"/>

        <ProgressBar 
            android:id="@+id/empty_progressbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:layout_gravity="center"
            android:indeterminate="true"/>

    </FrameLayout>

データベースまたはサーバーからデータをロードする前に、ProgressBarの可視性をVisibleに変更し、ListViewの空のビューとして設定します。そのため、ListViewにProgressBarが表示され始め、データがまだ読み込まれていることをユーザーに示します。

エラーが発生した場合、またはデータベースまたはサーバーからデータが取得されなかった場合は、ProgressBarの可視性をGoneに設定し、TextViewの可視性をVisibleに変更します。次に、TextViewをListViewの空のビューとして設定します。

于 2014-02-19T13:54:37.757 に答える
0

古いプロジェクトでこのコードを見つけました。正常に動作するはずです。

View emptyView = inflater.inflate(R.layout.id_of_your_layoout_file, parent, false);
getListView.setEmptyView(emptyView);
于 2012-11-18T18:00:29.813 に答える