【问题标题】:Android Progress Dialog Box While updating GUI更新 GUI 时的 Android 进度对话框
【发布时间】:2013-01-29 09:52:49
【问题描述】:

所以我已经在这里工作了 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();
    }
}

【问题讨论】:

  • 发布您的 asyncTask 代码以及您调用 asyncTaskObj.execute() 的位置。
  • 我删除了它,因为为我的所有课程制作任务并不是很漂亮。因为progressdialog 只需要在我运行try-catch 中的代码时显示。但是,如果您认为有必要,我可以再次创建 asyncTask 并将其发布

标签: android multithreading android-asynctask progressdialog runnable


【解决方案1】:
/// try :)

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

//// catch :)

activity.runOnUiThread(new Runnable()
{
progressgialog.setMessage("asd");
});

【讨论】:

    【解决方案2】:

    我找到了一种解决方法,并认为我会分享它。 由于我在 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多