所以我已经在这2天了,但仍然无法让它发挥作用。 我已经尝试过实现runnable,asynctask的解决方案,但它似乎永远不会与我的代码一起工作。也许我用错误的方式实现了它......
无论如何,我编写了以下代码。当我创建此活动时,我想显示一个带有“正在加载”文本的progressdialog。问题是,您无法从另一个线程更新GUI元素。那就是我被困住的地方。 希望你能帮助我!
PS:我需要ProgressDialog的原因是因为行
ArrayList<String> genres = MysqlHandler.getAllGenres();
加载可能需要相当长的时间。此外,我还有一些其他活动需要做同样的事情,加载最多可能需要5秒钟。
public class GenreActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_genre);
try {
ArrayList<String> genres = MysqlHandler.getAllGenres();
LinearLayout layout = (LinearLayout) findViewById(R.id.AllGenreLayout);
for(int i = 0; i < genres.size(); i++)
{
Button myButton = new Button(this);
myButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.yellow_button));
myButton.setTextAppearance(this, R.style.ButtonText);
myButton.setText(genres.get(i));
myButton.setOnClickListener(this);
layout.addView(myButton);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
/// try :)
progressgialog.post(new Runnable(){
run ()
{
progressgialog.setMessage("asd");
}
})
//// catch :)
activity.runOnUiThread(new Runnable()
{
progressgialog.setMessage("asd");
});
答案 1 :(得分:0)
我找到了解决办法,并认为我会分享它。 由于我在oncreate方法中创建了另一个线程,我想我也可以在启动intent时创建一个线程。所以代替这段代码:
Intent inte = new Intent(FirstSearchActivity.this, GenreActivity.class);
startActivity(inte);
现在我在做:
//start the progress dialog
progressDialog = ProgressDialog.show(FirstSearchActivity.this, "", "Loading...");
new Thread()
{
public void run()
{
Intent inte = new Intent(FirstSearchActivity.this, GenreActivity.class);
startActivity(inte);
progressDialog.dismiss();
}
}.start();