我正在尝试模拟发送消息的进度。 主要思想是为发送给他们的消息的成员着色,提升状态栏等。(gui 更改)所有这些在每次循环迭代时都有延迟。
主要问题是一切都在 onClick 监听器内部进行,并且在其中运行线程不会有帮助):因为 gui 仅在延迟完成后才发生更改。
有人可以建议我如何进行这种模拟吗?
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for(int i=0; i<phoneNumbers.size(); i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
members.get(i).setBackgroundColor(Color.GREEN);
members.get(i).invalidate();
mProgressDialog.setProgress(i+1);
sentCount.setText(getString(R.string.msgSentCount) + (i+1));
if(i==12){
scroolView.animate().translationYBy(-50);}
}
}
});
非常感谢您!
最佳答案
如果我没理解错的话——假进度+等待时间。首先,处理程序非常适合延迟输出:
//Fake Progress
progress = new ProgressDialog(this);
open(this);
// Delay output
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
setData();
}
}, 6000);
在函数 setData() 中,执行您想要执行的任务 和假的进度条:
public void open(Activity activity) {
progress.setMessage("Fakeprogress, Data Mining...");
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setIndeterminate(false);
progress.setCancelable(false);
progress.setMax(100);
progress.setProgress(10);
progress.show();
final int totalProgressTime = 100;
final Thread t = new Thread() {
@Override
public void run() {
int jumpTime = 0;
while (jumpTime < totalProgressTime) {
try {
sleep(60);
//System.out.println("********" + jumpTime);
jumpTime += 1;
progress.setProgress(0);
progress.setProgress(jumpTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
progress.dismiss();
}
};
t.start();
}
关于java android ,onclick按钮内的延迟包括gui更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26682426/