天天看點

Android點選button彈出ProgressDialog,響應結束後ProgressDialog消失

大家好,又見面了,我是你們的朋友全棧君。

  使用背景:項目中需要使用幾個機器學習模型,由于加載很緩慢,是以考慮用ProgressDialog來進行提示,預測結束後dialog自動消失。

  效果如下:

Android點選button彈出ProgressDialog,響應結束後ProgressDialog消失

1.聲明Handler和ProgressDialog

public ProgressDialog progressDialog;
public Handler handler = null;           

複制

2.點選事件

query.setOnClickListener(v -> { 
   
    progressDialog = new ProgressDialog(AdaBoostActivity.this);
    progressDialog.setTitle("提示");
    progressDialog.setMessage("正在加載...");
    progressDialog.setIcon(R.drawable.running);
    new Thread(){ 
   
        public void run(){ 
   
            try{ 
   
                runOnUiThread(() -> createList());
                Message msg = new Message();
                msg.what = 1;
                handler.sendMessage(msg);
            }catch(Exception e){ 
   
                e.printStackTrace();
            }
        }
    }.start();//線程啟動
    handler = new Handler(){ 
   
        @Override
        public void handleMessage(@NonNull Message msg) { 
   
            super.handleMessage(msg);
            progressDialog.dismiss();
            ToastUtil.showMessage(AdaBoostActivity.this, "預測完成!");
        }
    };
    progressDialog.show();
});           

複制

其中:

runOnUiThread(() -> createList());           

複制

  createList()方法完成後ProgressDialog消失,因為createList()中涉及到渲染TextView,是以使用runOnUiThread()。

  createList完成後handler發送消息:

Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);           

複制

  然後銷毀dialog:

handler = new Handler(){ 
   
    @Override
    public void handleMessage(@NonNull Message msg) { 
   
        super.handleMessage(msg);
        progressDialog.dismiss();
        ToastUtil.showMessage(AdaBoostActivity.this, "預測完成!");
    }
};           

複制

3.銷毀線程

@Override
protected void onDestroy() { 
   
    super.onDestroy();
    if(handler != null) { 
   
        handler.removeCallbacksAndMessages(null);
    }
}           

複制

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/159092.html原文連結:https://javaforall.cn