我的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