我的Activity中有以下内容,我用它来下载LoveFilm队列中的用户电影,但ProgressDialog从未出现过。
public class MyListActivity extends Activity {
SharedPreferences prefs;
ProgressDialog m_progressDialog;
Thread listThread;
User user;
private Runnable threadProc_initializeQueue = new Runnable() {
public void run() {
user.fetchQueues();
Queue defaultQueue = user.getDefaultQueue();
defaultQueue.fetchTitles();
m_progressDialog.dismiss();
}
};
/* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE);
// Authenticate the user if needs be.
if(!prefs.getBoolean("isAuthenticated", false)) {
Intent i = new Intent(this, OAuthActivity.class);
startActivity(i);
finish();
} else {
// Get the users default list.
LoveDroid app = (LoveDroid) getApplication();
user = new User(app);
m_progressDialog = ProgressDialog.show(MyListActivity.this, "Please Wait", "Loading", true);
listThread = new Thread(null, threadProc_initializeQueue);
listThread.run();
}
}
我见过其他人有这个问题,他们基本上都在推荐一条看起来像我的线
m_progressDialog = ProgressDialog.show(MyListActivity.this, "Please Wait", "Loading", true);
其余的代码工作,用户电影通过线程下载,但对话框从不显示,也需要几秒钟,这不像对话框在它有时间出现之前被解雇。
答案 0 :(得分:8)
最好使用AsyncTask(而不是线程 - 在Android活动中通常是一种很好的做法)。
创建一个AsyncTask类,并在该类上添加onPreExecute的进度对话框,并在onPostExecute中将其关闭。 您可以找到示例here。
除此之外,您的代码中存在一些问题:
答案 1 :(得分:1)
如果您使用this
而不是MyListActivity.this
拨打电话怎么办?
尽管不太可能,因为它在onCreate()中,但是它不是从UI线程调用的。
尝试使用runOnUiThread()围绕调用:
Activity me = this;
runOnUiThread(new Runnable()
{
public void run()
{
m_progressDialog = ProgressDialog.show(me, "Please Wait", "Loading", true);
}
});