我的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");
}
}
正如我所提到的......我不是在我的XML或其他地方的任何地方设置微调。我相信这是在加载活动之间的微调。在这种情况下,解决方案将加载任何类型的活动,以显示相关的失败消息 – shantanu
我可以向您保证的一件事是,Android SDK不会自行添加任何微调,无论是加载活动还是其他任何地方对于这个问题。我认为有一些与调用微调器的方法invokeMashupService相关的代码的一部分。它可能是由该方法中使用的库添加的视图,或者它所使用/继承的类可能正在添加微调器。 此外,它不会停止出现,除非GroupListAdapter或GroupListItem中的某些代码片段隐藏它或停止其动画。 这一切都是最好的。请在您找到解决方案时更新。 –
如果您在活动/片段中未提供任何UI元素一段时间,则Android会在活动/片段之间添加微调器。解决方案:在处理故障案例时,将任何UI元素添加到活动中,并且一旦执行了故障块,微调器就会停止。在我的情况下,我添加了一个listView头和一个空列表,并使用listView头我可以向用户显示任何相关的消息。 – shantanu