1

MyListFragmentは、AsyncTask を使用して REST サービスからデータをフェッチします。ブロックはonPostExecute()、結果ではなく、成功/失敗ステータスをフラグメントに返します。私のフラグメントでは、このステータスを使用して、ListView(成功の場合) 表示するか、(失敗の場合) トーストをポップアップします。

が実行されるとすぐに、アクティビティ サークルが画面の中央に表示され、データが利用可能AsyncTaskになると に置き換えられます。ListViewデータが利用できない場合、トースト メッセージはポップアップしますが、アクティビティ サークルは削除されません。アクティビティ スピナーをいつ開始するかは、コードのどこにも宣言していません。

失敗した場合、活動サークルを停止するにはどうすればよいですか?

のコード ブロックは次のAsyncTaskとおりです。

    class invokeServiceTask extends AsyncTask<String, Void, ServiceResult> {
          @Override
          // method to be run in BG thread
          // pass the mashup parameters to the BG thread
          protected ServiceResult doInBackground(String... id) {
                 return invokeMashupService(id);
          }

          @Override
          // called on UI thread when the worker is done
          protected void onPostExecute(ServiceResult result) {
                 _delegate.mashupReturned(result);
          }
   }

結果が SERVICE_FAILURE として返された場合、完了後に UI で実行される以下のコード ブロックに見られるようにトーストを表示していますAsyncTask

    public void mashupReturned(ServiceResult result) {

          // check for getActivity to counter the case when user presses the back
          // button quickly and the app context is no longer valid.
          if (getActivity() != null) {
                 if (result == ServiceResult.SERVICE_SUCCESS) {
                       // Fetch the array of GroupListItems and create a
                       // GroupListAdapter using it
                       GroupListItem[] list_data = _dataModel.getData();
                       GroupListAdapter adapter = new GroupListAdapter(getActivity(),
                                     R.layout.list_row, list_data);
                       setListAdapter(adapter);
                 } else {
                       // TODO: stop the activity spinner
                       Toast.makeText(getActivity(),
                                     "Problem invoking service: " + result,
                                     Toast.LENGTH_SHORT).show();
                 }
          } else {
                 Log.i("test", "Activity is null");
          }
   }
4

2 に答える 2

0

その抽象的なコードについてお手伝いできるかどうかわかりません。

ここで考えられる唯一の理由は、メソッド invokeMashupService(id) が ProgressBar またはスピナーを呼び出してアニメーションを開始し、ListView のコンストラクターまたはその中の他のメソッドがスピナーのアニメーションを停止する呼び出しを呼び出している場合です。 、または可視性を View.INVISIBLE または View.GONE に設定します。

このファイルで使用されるレイアウトの xml ファイルで ProgressBar またはスピナーを探し、メソッド mashupReturned の失敗ブロックで、スピナーが不要になった場合は可視性を View.GONE に設定し、必要でない場合は View.INVISIBLE に設定します。スピナーは後で必要になる場合があります。

お役に立てれば

アヌジ

于 2013-05-31T18:39:46.833 に答える