java android,延迟里面的onclick按钮包含gui更改

时间:2014-10-31 19:52:38

标签: java android

我正在尝试模拟发送消息进度。 主要的想法是为发送给他们的消息的成员着色,提升状态栏等。(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);}

                        }
            }
        });

非常感谢你!

2 个答案:

答案 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);