0

我得到了这个代码:

public void make_square(View v) {
TextView txt_wait = (TextView) findViewById(R.id.square_txt);
txt_wait.setText("wait...");
try{
//rest of the code (scanning a bitmap for pixels)

" make_square" 是一个 onClick 事件(在 XML 文件中)。当我单击要更改文本时(txt_wait

然后在更改之后,他必须执行其余的代码。但不知何故,它会等待其余的代码,然后当该代码完成时,他会更改txt_wait

我也尝试过这样的事情(也没有工作):

public void make_square(View v) {
    TextView txt_wait = (TextView) findViewById(R.id.square_txt);
    txt_wait.setText("wait...");
    make_square2(v);
}
public void make_square2(View v){
    try{
    //rest of the code (scanning a bitmap for pixels)
    }
}

但是现在,它首先make_square2在更改文本之前执行。为什么或如何解决这个问题?它txt_wait首先改变,然后改变它,然后是其余的代码?

已经谢谢了, Bigflow

编辑1:

试过这个:

public void make_square(final View v) {

    TextView txt_wait = (TextView) findViewById(R.id.square_txt);
    txt_wait.setText("wait...");
        new Thread() {
            public void run() {
                make_square2(v);
            }
        }.start();

}

public void make_square2(View v){   
   try{
      //rest of the code
   }
}

它给了我这个错误:

E/AndroidRuntime(17487): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

我也试过这个:

    public void make_square(View v) {
        TextView txt_wait = (TextView) findViewById(R.id.square_txt);
        txt_wait.setText("wait...");
        make_square2(v);    
}

public void make_square2(View v)
        new Thread() {
            public void run() {
//rest of the code
}
        }.start();

这也给出了完全相同的错误。

我不熟悉线程使用,也许我做了一些非常糟糕的事情。希望你能再次帮助我。

4

2 回答 2

0

我认为您可以为 make_square2 方法中的代码创建一个单独的线程。然后文本将被更改...并且其余代码将在 UI 线程以外的线程中运行..这似乎阻塞了 UI 线程。 .

于 2012-05-10T10:14:34.577 回答
0

我使用 AsyncTask 来完成这项工作,不知何故线程方法对我不起作用。

我使用了本教程: http ://www.android10.org/index.php/forums/43-view-layout-a-resource/908-tutorial-progressbar-running-in-asynctask

感谢 AdilSoomro 和 JayeshPate。

于 2012-05-11T09:32:59.053 回答