gpt4 book ai didi

java - 如何在 UI 上显示进度对话框?

转载 作者:行者123 更新时间:2023-12-02 06:29:45 25 4
gpt4 key购买 nike

我有一个任务要运行,需要很长时间。因此,我想实现一个进度对话框(旋转轮),以向用户显示任务仍在后台运行的消息。我在网上找到了很多解决方案,我使用了以下代码。我确保在单独的线程中运行该任务。但它没有显示在 UI 上。

OnClickListener confirmPrintButtonListener = new OnClickListener() {

public void onClick(View v) {
try {
final SalesStockController salesStockController = new SalesStockController();
final ArrayList<ProductReload> productReloadList = reloadActivityAdapter
.getReloadList();

if (productReloadList.size() != 0) {
progressDialog = new ProgressDialog(StockReloadActivity.this);
progressDialog.setTitle("ABC Trading");
progressDialog.setMessage("Wait while loading...");
progressDialog.show();

new Thread(new Runnable() {
public void run()
{
// do the thing that takes a long time
try {
salesStockController.reload(productReloadList);
} catch (SQLiteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ABCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

runOnUiThread(new Runnable() {
public void run()
{
progressDialog.dismiss();
}
});
}
}).start();

AlertDialog.Builder builder = new AlertDialog.Builder(
v.getContext());
builder.setCancelable(false).setPositiveButton("OK",
new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,
int which) {
finish();
}
});

AlertDialog alert = builder.create();

alert.setTitle("ABC Trading");
alert.setMessage("Reload Successfully");

alert.show();

ReloadSlipPrint print = new ReloadSlipPrint(
productReloadList);
print.print();

} else {
AlertDialog.Builder builder = new AlertDialog.Builder(
v.getContext());
builder.setCancelable(false).setPositiveButton("OK", null);
AlertDialog alert = builder.create();

alert.setTitle("ABC Trading");
alert.setMessage("No Stock To Reload");

alert.show();
}

} catch (Exception e) {
ABCUtil.displayErrorMsg(v.getContext(), e);
}
}
};

有人可以指出我的代码有什么问题吗?任何帮助将非常感激。

最佳答案

我给你编了一个简单的例子,你可以试试。

public class MainActivity extends Activity {

private ProgressDialog mLoadingDialog;
private Handler mHandler = new Handler();
private void showLoadingDialog(final String title, final String msg) {
mHandler.post(new Runnable() {
@Override
public void run() {
if(mLoadingDialog == null) {
mLoadingDialog = ProgressDialog.show(MainActivity.this, title, msg);
}
mLoadingDialog.setTitle(title);
mLoadingDialog.setMessage(msg);
}
});
}

private void hideLoadingDialog() {
mHandler.post(new Runnable() { //Make sure it happens in sequence after showLoadingDialog
@Override
public void run() {
if(mLoadingDialog != null) {
mLoadingDialog.dismiss();
}
}
});
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread() {
@Override
public void run() {
showLoadingDialog("Loading", "Please wait...");
//DO something
hideLoadingDialog();
}
}.start();
}
}

关于java - 如何在 UI 上显示进度对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com