2013-05-31 109 views
1

我的ListFragment使用AsyncTask从REST服务中提取数据。 onPostExecute()块将成功/失败状态返回到我的片段而不是结果。 在我的片段中,使用此状态显示我的ListView(如果成功)或弹出祝词(如果失败)。手动停止android活动微调器

只要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"); 
      } 
    } 

回答

0

我不知道我是否可以帮你抽出一段代码。

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

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

希望这有助于

Anuj

+0

正如我所提到的......我不是在我的XML或其他地方的任何地方设置微调。我相信这是在加载活动之间的微调。在这种情况下,解决方案将加载任何类型的活动,以显示相关的失败消息 – shantanu

+0

我可以向您保证的一件事是,Android SDK不会自行添加任何微调,无论是加载活动还是其他任何地方对于这个问题。我认为有一些与调用微调器的方法invokeMashupService相关的代码的一部分。它可能是由该方法中使用的库添加的视图,或者它所使用/继承的类可能正在添加微调器。 此外,它不会停止出现,除非GroupListAdapter或GroupListItem中的某些代码片段隐藏它或停止其动画。 这一切都是最好的。请在您找到解决方案时更新。 –

+0

如果您在活动/片段中未提供任何UI元素一段时间,则Android会在活动/片段之间添加微调器。解决方案:在处理故障案例时,将任何UI元素添加到活动中,并且一旦执行了故障块,微调器就会停止。在我的情况下,我添加了一个listView头和一个空列表,并使用listView头我可以向用户显示任何相关的消息。 – shantanu

0

解决.. 我没有设置任何UI元素处于不良状态,因为它的活性被微调坚持。 我删除了Toast语句,并添加了一个Header行以及一个空的ListView。这将停止微调器并向我显示标题中的消息。