手动停止android活动微调器

时间:2013-05-31 09:35:52

标签: android-listview android-asynctask

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

执行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返回,我正在显示一个吐司,如下面的代码块中所示,在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");
          }
   }

2 个答案:

答案 0 :(得分:0)

我不确定我是否可以用一段代码来帮助你。

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

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

希望这有帮助

Anuj

答案 1 :(得分:0)

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