2013-06-24 64 views
4

有沒有解決TextView設置文本花費多長時間的方法?我正在嘗試設置一個很長的字符串,並因此終止了一個好的2-3秒的UI線程。由於我不能從另一個線程訪問TextView,我完全被困住了。帶有非常長的字符串塊的TextView.setText()UI線程

編輯: 目前,我建立了onPostExecute(這是對uiThread運行)TextView是被放在一個滾動型

內內的AsyncTask doInBackground()裏面的字符串, 只有調用TextView.setText()

回答

3

即使加載了幾個屏幕的信息,您也不應該遇到問題。如果字符串超長,您可能會考慮延遲加載部分內容。

+0

這需要使用ListView,每行都是單獨的TextView嗎? – jkau

+2

不,將字符串拆分成數組。然後,您只需跟蹤textview中的滾動位置:當它靠近底部時,使用append()將更多文本加載到視圖中。所以textview.append(array.get(position));. –

+0

有意思的是,我需要自己定製textview嗎? – jkau

-1

既然不能從不同的線程訪問的TextView,

您可以使用不同的Thread仍然訪問TextView。不知道你的代碼它很難給出一個很好的例子,但可以使用runOnUiThread

你可以使用一個AsyncTask。這樣做,你可以做任何你需要在doInBackground()和設置文字onPostExecute()

雖然,我不知道你的字符串需要幾秒鐘加載多久。如果你正在做很多工作來把字符串放在一起,那麼我會建議使用AsyncTask

+0

我已經在使用AsyncTask。我在onPostExecute()中做的唯一事情是在TextView中設置文本,並阻止線程。所以基本上它會有相同的結果,如果我嘗試runOnUiThread anyway – jkau

+0

好吧,這是應該在您的OP中的信息,所以我們可以幫助更好。也許在你的'AsyncTask'上發表你的想法,這樣我們可以找到更好的方法 – codeMagic

+0

@codeMagic runOnUIThread等於繼續在uiThread上工作。所以你不會訪問不同線程的textview,除非切換到UI線程。 – Talha