【发布时间】:2017-01-21 20:05:01
【问题描述】:
我正在尝试在 EditText 中设置大文本,该操作可能需要 30 多秒,因此我使用 ProgressDialog。它显示出来,但没有动画,然后在操作完成后消失。这是我的简化代码:
class FileOpener extends AsyncTask<File, Integer, String> {
private ProgressDialog progress;
@Override
protected void onPreExecute() {
progress = new ProgressDialog(context);
...
progress.show();
}
@Override
protected StringBuilder doInBackground(File... files) {
return readFile();
}
@Override
protected void onPostExecute(String content) {
EditText editText = ...
editText.post(new Runnable() {
@Override
public void run() {
editText.setText(content);
progress.dismiss();
}
});
}
}
如何在设置文本时为进度对话框设置动画?
我也尝试在onPostExecute 中使用它,同样的,对话框存在但没有动画...
EditText editText = ...
new Thread() {
@Override
public void run() {
editor.setText(content);
progress.dismiss();
}
}.start();
EDIT - 这不是关于我的 EditText 速度的问题,据我所知,这很糟糕。这个问题是here。无论我如何提高速度,对于大文件,设置文本总是需要几秒钟,即使是顶级编辑应用程序也不行。这个问题的真正含义是如何保持加载对话框动画,因为目前,它在设置 EditText 中的文本时没有动画。如果不在 UI 线程中,我不知道 UI 上的任何内容都无法更改,那么如何更新/动画加载?如果这是不可能的,或者太复杂或 hacky,那么我如何在设置文本时显示任何类型的加载动画。
【问题讨论】:
-
在AsyncTask中有一个函数叫
onProgressUpdate()。然后在您的readFile()中,致电publishProgress(yourValue)。 -
实际上最耗时的是设置文本。读取文件可能需要 1 秒,而设置文本可能需要 30 秒。而且我真的不能在 setText 中调用这个函数...
-
哦,我明白了,您可以在
readFile()之后直接尝试setText,在runOnUiThread()中,然后在PostExecute()中关闭您的对话框。要调用runOnUiThread(),您需要一个活动。 -
如何在
EditText上设置String需要超过1ms? -
@RaphaelTeyssandier 不,这样做时对话框会在设置文本之前被关闭。
标签: android multithreading android-edittext