进度条直到最后一刻才出现

时间:2018-03-25 09:46:30

标签: java android

这是我的第一个Android应用程序,
我在按钮点击时调用函数result,但由于调用findTimeTable需要时间我想要显示进度条但由于某种原因,进度条无法显示直到对话框之前的最后一刻创建,这打败了我显示该时间段的进度条的目的。事实上,只有当我没有将他们的知名度恢复到原来的状态时,才能看到最后一刻。

public void result(View view) throws IOException {
    findViewById(R.id.loadingPanel).setVisibility(View.VISIBLE);
    findViewById(R.id.chooseFile).setVisibility(View.GONE);
    findViewById(R.id.chooseDay).setVisibility(View.GONE);
    findViewById(R.id.chooseTime).setVisibility(View.GONE);
    findViewById(R.id.findFaculty).setVisibility(View.GONE);
    String n = findTimetable(index_day, index_time);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("hello" +n);
    builder.setCancelable(false);
    builder.setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i){
                }
            });
    final Dialog mDialog = builder.create();
    mDialog.show();
    findViewById(R.id.loadingPanel).setVisibility(View.GONE);
    findViewById(R.id.chooseFile).setVisibility(View.VISIBLE);
    findViewById(R.id.chooseDay).setVisibility(View.VISIBLE);
    findViewById(R.id.chooseTime).setVisibility(View.VISIBLE);
    findViewById(R.id.findFaculty).setVisibility(View.VISIBLE);
}

我找到了相关的答案android progress bar not showing
但由于我不熟悉编程中的线程,因此我无法在代码中正确实现它 请帮忙。

1 个答案:

答案 0 :(得分:0)

使用AsyncTask进行繁重的comupting并在其Pre / Post状态中添加进度条,如果您选择从那里更新GUI,则需要在UI Thread上运行该代码。

示例AsyncTask:

 private class LongOperation extends AsyncTask<String, Void, String> {

      @Override
      protected void onPreExecute() {
          // Start progressbar
      }

      @Override
      protected String doInBackground(String... params) {
          // Computing goes here
          return null;
     }

     @Override
     protected void onPostExecute(String result) {
         // Stop progressbar
         UpdateMyGUI();
     }

     @Override
     protected void onProgressUpdate(Void... values) {
         // Update progressbar (?)
     }
}

private void updateMyGUI(){
    runOnUiThread (new Runnable() {  
        public void run() {
            // Update GUI Here.
        }
    });
}