我只是尝试实现progressdialog,在长期复杂的计算中,我有一些问题需要更改文本。
for (String aString:myStringArray){
Log.v(TAG, aString);
mProgressDialog.incrementProgressBy(1);
mProgressDialog.setMessage(aString);
}
我可以清楚地看到incrementProgressBy工作和我的对话框更新,但消息没有改变。
关于如何做到这一点的任何想法?
非常感谢。
答案 0 :(得分:57)
刚刚找到了答案,这工作正常:
runOnUiThread(changeMessage);
使用该代码:
private Runnable changeMessage = new Runnable() {
@Override
public void run() {
//Log.v(TAG, strCharacters);
m_ProgressDialog.setMessage(strCharacters);
}
};
答案 1 :(得分:0)
我将图片循环上传到 Firebase
并更新每张图片的 ProgressDialog
:
(我在 Fragment
中,所以我在调用 getActivity()
之前使用了 runOnUiThread()
)
List<Bitmap> bitmaps;
int picCounter = 1;
...
progressDialog = ProgressDialog.show
(getContext(), "sending...", "just a minute", false, false);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < bitmaps.size(); i++) {
String filename = String.valueOf(i);
uploadPic(bitmaps.get(i), "img" + filename, new MyCallback() {
@Override
public void onFinish() {
picCounter++;
Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
public void run() {
progressDialog.setTitle ("upoading " + picCounter + "image from " + bitmaps.size());
}
});
}
});
}
}
}).start();
uploadPic 方法:
public interface MyCallback { void onFinish ();}
private void uploadPic(final Bitmap bitmap, final String fileName, final MyCallback callback) {
... // uploading to firebase and then:
callback.onFinish();
}