AlertDialog - Как обновить сообщение после того, как событие произошло - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь показать диалоговое окно с индикатором выполнения и сообщением о том, что «Bluetooth подключается». Я хочу изменить этот текст на «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;
}

Мой вопрос: при отображении диалогового окна с предупреждением, как я могу обновлять отображаемое сообщение каждый раз?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Попробуйте это

 @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
    {
        if(progressDialog != null && progressDialog.isShowing()) {
            progressDialog.setMessage("Bluetooth Not Connected");
        } else {
            // handle
        }
    }
}
0 голосов
/ 09 апреля 2020

Вам потребуется создать файл макета XML, содержащий TextView и ваш индикатор выполнения, вместо того, чтобы создавать его экземпляр в коде.

Примените свой макет с помощью dialog.setView (R.layout.yourLayout).

Затем вы можете использовать dialog.findViewById (R.id.yourTextViewID) для получения желаемого TextView. Получив его, вы можете вызвать setText (yourText) в представлении.

Вам не нужно вызывать dialog.setMessage (yourMessage), если вы выбрали go таким образом.

Надеюсь, это поможет.

Если вы все еще сомневаетесь, вы можете прочитать это:

https://developer.android.com/guide/topics/ui/declaring-layout

В качестве альтернативы, вы можете установить сообщение на сам диалог. (вместо компоновщика)

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_bI9tnoAhWtzoUKHbWNBbUQjawgA0EWW6W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W1W4W 1023 *

...