2013-05-31 139 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。這將停止微調器並向我顯示標題中的消息。