Java progressdialog阻止contentview切换?
每当我在关闭进度对话框后试图设置内容视图时,都会出现如下错误 04-13 14:40:38.043:WARN/System.err(801):android.view.ViewRoot$calledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 04-13 14:40:38.073:WARN/InputManagerService(59):窗口已聚焦,忽略:com.android.internal.view.IInputMethodClient$Stub的聚焦增益$Proxy@44dde3f0 我的代码就像Java progressdialog阻止contentview切换?,java,android,Java,Android,每当我在关闭进度对话框后试图设置内容视图时,都会出现如下错误 04-13 14:40:38.043:WARN/System.err(801):android.view.ViewRoot$calledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 04-13 14:40:38.073:WARN/InputManagerService(59):窗口已聚焦,忽略:com.android.internal.view.IInputMethodClient$
ProgressDialog dialog = null; //class variable.
dialog = ProgressDialog.show(Login.this, "",
"Logging you in. Please wait...", true);
new Thread() {
public void run() {
try{
//serious work here!
}
dialog.dismiss();
setContentView(R.layout.blaa);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
这是什么原因造成的?您的线程不是UI线程。我认为您需要创建一个处理程序,然后在需要切换内容视图时向其发布Runnable
Handler hdl = new Handler(); // Will ron on UI-thread
dialog = ProgressDialog.show(Login.this, "",
"Logging you in. Please wait...", true);
new Thread() {
public void run() {
try{
//serious work here!
}
hdl.post(new Runnable() {
public void run() {
dialog.dismiss();
setContentView(R.layout.blaa);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
您可以这样使用它:
//Initialise
private ProgressDialog m_ProgressDialog = null;
private Runnable myRunnable;
//Make a runnable
myRunnable= new Runnable(){
@Override
public void run(){
Thread.sleep(5000);
setContentView(R.layout.blaa);
m_ProgressDialog.dismiss();
}
};
//initialize your thread
Thread thread = new Thread(null, myRunnable, "MagentoBackground");
thread.start();
//open up you dialog
m_ProgressDialog = ProgressDialog.show(SelectStation.this,
"", "Loading, please wait...", true);
它实现了一个runnable来运行您的逻辑