我的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");
}
}
答案 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。这会停止微调器并在标题中显示我想要的消息。