0

所以我已经在这里工作了 2 天,但仍然无法正常工作。我已经尝试过实现可运行的异步任务的解决方案,但它似乎永远无法与我的代码一起使用。也许我以错误的方式实施它......

无论如何,我编写了以下代码。当我创建这个活动时,我想显示一个带有文本“正在加载”的进度对话框。问题是,您不能从另一个线程更新 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();
    }
}
4

2 回答 2

0
/// try :)

progressgialog.post(new Runnable(){
run ()
{
progressgialog.setMessage("asd");
}
})

//// catch :)

activity.runOnUiThread(new Runnable()
{
progressgialog.setMessage("asd");
});
于 2013-01-29T09:58:13.177 回答
0

我找到了一种解决方法,并认为我会分享它。由于我在 oncreate 方法中创建了另一个线程,我想我也可以在启动意图时创建一个线程。所以代替这段代码:

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();
于 2013-01-30T13:59:27.610 回答