1

ListFragment使用 AsyncTask 从 REST 服务中获取数据。该onPostExecute()块将成功/失败状态返回给我的片段而不是结果。在我的片段中,使用此状态来显示我的ListView(在成功的情况下)或弹出一个 toast(在失败的情况下)。

一旦AsyncTask执行,屏幕中间就会显示一个活动圈,ListView一旦数据可用,它就会被替换。如果数据不可用,会弹出 toast 消息,但不会删除活动圈。我没有在代码中的任何地方声明何时启动活动微调器。

活动圈失败了怎么停止?

这是 的代码块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,我将显示一个 toast,如下面的代码块所示,AsyncTask完成后在 UI 中执行。

    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

已解决.. 我没有将任何 UI 元素设置为失败状态,因此活动微调器持续存在。我删除了 Toast 语句并添加了一个标题行以及一个空的 ListView。这会停止微调器并在标题中显示我想要的消息。

于 2013-06-02T11:01:59.453 回答
0

我不确定我是否可以帮助您处理那段抽象的代码。

我在这里能想到的唯一可能原因是方法 invokeMashupService(id) 正在调用 ProgressBar 或微调器以开始动画,并且当您的 ListView 的构造函数或其中的某些其他方法调用调用以停止微调器的动画时,或将其可见性设置为 View.INVISIBLE 或 View.GONE。

尝试在此文件使用的布局的 xml 文件中查找任何 ProgressBar 或微调器,并在您的方法 mashupReturned 的失败块中,如果微调器不再需要,则将其可见性设置为 View.GONE,如果稍后可能需要微调器。

希望这可以帮助

阿努伊

于 2013-05-31T18:39:46.833 回答