我正在尝试模拟发送消息进度。 主要的想法是为发送给他们的消息的成员着色,提升状态栏等。(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);}
}
}
});
非常感谢你!
答案 0 :(得分:0)
如果我理解你的话 - 假进度+等待时间。首先是处理程序延迟输出的延迟:
//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();
}
答案 1 :(得分:0)
最后让它适用于递归!!!!
public static int counter=0;
public void runMother(final Handler handler)
{
if(counter==3)return;
handler.postDelayed(new Runnable() {
@Override
public void run() {
members.get(counter).setBackgroundColor(Color.GREEN);
counter++;
runMother(handler);
}
}, 1000*counter);