【问题标题】:Progress bar not showing up till last moment进度条直到最后一刻才显示
【发布时间】:2018-09-03 14:18:27
【问题描述】:

这是我的第一个安卓应用,
我在按钮单击时调用函数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
但由于我不熟悉编程中的线程,我无法在我的代码上正确实现它。
请帮忙。

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    示例异步任务:

     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.
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多