我正在尝试显示一个带有进度条和显示“蓝牙正在连接”的消息的警报对话框。 连接成功后,我想将该文本更改为“ Bluetooth Connected”。
但是,第二次调用警报对话框后,出现错误
指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。
我发现了几个类似的问题,但还无法找到解决方案。
我的代码:
我先打电话
showProgressBar("Connecting to Bluetooth...");
然后,根据回调方法的结果,我尝试再次显示/用不同的消息更新警报对话框
@Override
/*
* Callback method that is triggered once we have a result about the bluetooth connection
* */
public void isBluetoothConnected(boolean isConnected)
{
if (isConnected)
{
showProgressBar("CONNECTED!");
}
else
{
showProgressBar("Bluetooth Not Connected");
}
}
这就是我创建警报对话框的方式
public void showProgressBar(String loadingStatus)
{
activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
if (progressDialog!=null)
{
progressDialog.dismiss();
}
progressDialog = getDialogProgressBar(loadingStatus).create();
progressDialog.show();
}
});
}
public AlertDialog.Builder getDialogProgressBar(String loadingStatus)
{
ProgressBar progressBar = new ProgressBar(context);
if (builder == null)
{
builder = new AlertDialog.Builder(context);
builder.setCancelable(false);
builder.setMessage(loadingStatus);
builder.setNegativeButton("Cancel", null);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
progressBar.setLayoutParams(lp);
builder.setView(progressBar);
}
return builder;
}
我的问题是,显示警告对话框时,如何每次更新显示的消息?
您将需要创建一个包含TextView和进度条的XML布局文件,而不是在代码中实例化它。
使用dialog.setView(R.layout.yourLayout)应用布局。
然后,您可以使用dialog.findViewById(R.id.yourTextViewID)获得所需的TextView。检索到它之后,可以在视图上调用setText(yourText)。
如果您选择这种方式,则无需调用dialog.setMessage(yourMessage)。
我希望这有帮助。
如果您仍然犹豫,可以阅读以下内容:
https://developer.android.com/guide/topics/ui/declaring-layout
或者,您可以在对话框本身上设置setMessage。 (而不是建造者)
https://www.google.com/url?sa=t&source=web&rct=j&url=https://stackoverflow.com/questions/16105920/refresh-or-change-the-alertdialog-message&ved=2ahUKEwjez_bI9tnoAhWtzoUKHbWNBbUQjjgwAHoECAUQAQ&usg=AOvVaw1SuAepw8YnMEtSb4Ga2yeI