我有一個AsyncTask
,其中需要播放ArrayList
的音樂文件。在doInBackground
方法中,我遍歷ArrayList並逐個播放歌曲。我想在UI的TextView
上放置一個狀態消息或其他信息來指示正在播放哪首歌曲,但獲取錯誤只有創建視圖層次結構的原始線程才能觸摸其視圖。如果我只更新onPreExecute()
和onPostExecute()
的UI小部件,該列表已被播放。有沒有辦法使用onProgressUpdate
或其他AsyncTask
方法來做到這一點?來自AsyncTask.doInBackground()的用戶反饋?
回答
這當然是可能的。這裏有一個簡單的例子,如果你有你想顯示歌曲名,專輯名和歌手名(我還沒有全面實施的AsyncTask,只是部分相關onProgressUpdate)字符串:
private class myAsyncTask extends AsyncTask<Void, String, Void>
{
protected Void doInBackground(Void... voids)
{
//Get some list of songs, named songs
for(Song song in songs)//This is the loop where you're playing your songs
{
publishProgress(song.name, song.album, song.artist);
//Play the song and wait for it to finish
}
return null;
}
protected void onProgressUpdate(String... songData)
{
//Assuming three text views exist to display your data
nameTextView.setText(songData[0]);
albumTextView.setText(songData[1]);
artistTextView.setText(songData[2]);
}
}
重要的事情需要注意的是尖括號中的第二類是onProgressUpdate
的參數類型,並且publishProgress
在doInBackground中被調用以觸發onProgressUpdate
。您可以在onProgressUpdate中找到的大多數示例都涉及增加ProgressBar上的填充,但該方法在UI線程上運行,並且可以與AsyncTask可以訪問的任何視圖進行交互。如果您仍然遇到麻煩,請發佈當前的AsyncTask,以便將此示例類整合到您已有的內容中。 Here are the docs for AsyncTask for more information.希望這有助於!
很好的答案!這非常有幫助,謝謝! – wufoo 2013-03-08 21:24:20
您應該可以使用onProgressUpdate()從UI線程執行更新。或者,你可以這樣做(當不使用AsyncTask時,這是典型的)。
後,更新你這樣的UI在UI線程上的事件:它會在UI線程上運行,因此它可以訪問和更新視圖
view.post(new Runnable() {
@Override
public void run() {
// Update your UI
}
});
。
是的。
當你decalre您的AsyncTask,您decalre即進入任務的各部分的類型:
public class MyTask extends AsyncTask<URL,Integer,Long> {
.
.
.
}
類型的順序,這個例子:
URL
被傳遞給doInBackground
(通過publishProgress
)Long
到達onPostExecute
,也doInBackground
返回值在你doInBackground()
,你可以調用publishProgress()
,這將反過來在主線程中調用onProgessUpdate()
(假設您創建的主線程上的AsyncTask)。
有一個在參考文檔下用法(link)一個完整的例子。
偉大的信息,謝謝邁克。 – wufoo 2013-03-08 21:24:48
- 1. 來自ICommand的反饋
- 2. Rails - 協會,用戶對用戶的反饋 - 顯示反饋
- 3. 來自eclipse插件的反饋?
- 4. 來自C#服務的視覺反饋
- 5. PHP客戶反饋
- 6. HTML輸入的理想用戶反饋
- 7. MVVM中的多線程/用戶反饋
- 8. eclipse.org是否有用戶反饋論壇?
- 9. 用戶(很像反饋頁)ASP.Net C#
- 10. 免費用戶反饋服務
- 11. 在Windows Phone上獲取用戶反饋
- 12. 來自PHP腳本的CMD - 獲取反饋
- 13. 如何接收來自服務器的反饋
- 14. SQL Server脫機時的客戶反饋
- 15. 用戶提示通過通知 - 反饋給用戶需要?
- 16. ItemizedOverlay反饋
- 17. 正面反饋
- 18. Winforms UI反饋
- 19. 類圖反饋
- 20. 建築反饋
- 21. 如何收集客戶反饋?
- 22. Java Web開發和自動反饋
- 23. 如果用戶使用後退按鈕,如何處理來自後臺線程的反饋?
- 24. 應用架構反饋
- 25. WP7應用反饋表
- 26. 如何獲取iPhone應用程序的用戶反饋?
- 27. 收到用戶輸入到Android應用程序的反饋?
- 28. 在ireport中使用的SQL查詢報告用戶反饋
- 29. 允許讀者用反饋來註釋我的要點
- 30. ASP.net反饋表格
你可以發佈你的AsyncTask聲明嗎?不是全部,而只是公開課......擴展AsyncTask'行,和構造函數(如果有的話)? – 2013-03-08 21:08:35