我想显示此对话框,而线程尝试建立连接,但是当我按下启动此方法的按钮时,对话框将不会显示。
public void add_mpd(View view){
dialog=ProgressDialog.show(MainActivity.this, "","Trying to connect...");
new Thread(new Runnable(){
public void run() {
try {
String child;
EditText new_mpd = (EditText) findViewById(R.id.new_mpd);
child=new_mpd.getText().toString();
mpd = new MPD(child);
children.get(1).add(child);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MPDConnectionException e) {
e.printStackTrace();
}
}
}
).start();
adapter.notifyDataSetChanged();
dialog.dismiss();
}
}
答案 0 :(得分:2)
它不会显示,因为(阻塞)工作是在另一个线程中完成的。这意味着,start()
- 类的Thread
- 方法不会阻止。
因此,您显示对话框,线程已启动,对话框立即被解除(因此关闭)。
在dismiss()
- 方法结束时拨打run()
,这应该可以正常工作。
上述内容可能对您有用,但您不应直接使用Thread
- 类。周围有包装,使用起来更舒服。
在Android中,如果你想在UI-Thread上做长期工作,你应该使用AsyncTask
。
答案 1 :(得分:0)
另外,为了建立Lukas所说的,你可以看一下这个例子。
http://www.helloandroid.com/tutorials/using-threads-and-progressdialog
public class ProgressDialogExample extends Activity implements Runnable {
private String pi_string;
private TextView tv;
private ProgressDialog pd;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
tv = (TextView) this.findViewById(R.id.main);
tv.setText("Press any key to start calculation");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
pd = ProgressDialog.show(this, "Working..", "Calculating Pi", true,
false);
Thread thread = new Thread(this);
thread.start();
return super.onKeyDown(keyCode, event);
}
public void run() {
pi_string = Pi.computePi(800).toString();
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
pd.dismiss();
tv.setText(pi_string);
}
};
}