Activity.runOnUiThread (действие Runnable) обновляет представление только один раз - PullRequest
0 голосов
/ 12 апреля 2019

В моем фрагменте у меня есть AlertDialog и менеджер соединений Bluetooth.Я хочу обновить AlertDialog новыми состояниями процесса подключения Bluetooth, поэтому я использовал метод runOnUiThread(...):

getActivity().runOnUiThread(new Runnable() {
    @Override
    void run() {
        interactor = new BluetoothInteractor(getActivity(), new OnBluetoothStatusChangedListener() {
            @Override
            public void OnConnectionStopped() {
                alertDialog.setMessage("Disconnected.");
            }

            @Override
            public void OnConnectionStopping() {
                alertDialog.setMessage("Stopping connection...");
            }

            @Override
            public void OnConnectionStarting() {
                alertDialog.setMessage("Connecting to device...");
            }

            @Override
            public void OnConnectionStarted() {
                alertDialog.setMessage("Streaming data...");
            }
        });
    }
});

При первом обновлении сообщения AlertDialog (событие OnConnectionStarting)все работает нормально, но во второй раз я получил android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Что здесь может происходить?

1 Ответ

1 голос
/ 12 апреля 2019

Заменить на

interactor = new BluetoothInteractor(getActivity(), new OnBluetoothStatusChangedListener() {
       @Override
       public void OnConnectionStopped() {
           getActivity().runOnUiThread(new Runnable() {
               @Override
               void run() {
                   alertDialog.setMessage("Disconnected.");
               }
           });
       }
       @Override
       public void OnConnectionStopping() {
           getActivity().runOnUiThread(new Runnable() {
               @Override
               void run() {
                   alertDialog.setMessage("Stopping connection...");
               }
           });
       }
       @Override
       public void OnConnectionStarting() {
           getActivity().runOnUiThread(new Runnable() {
               @Override
               void run() {
                   alertDialog.setMessage("Connecting to device...");
               }
           });
       }
       @Override
       public void OnConnectionStarted() {
           getActivity().runOnUiThread(new Runnable() {
               @Override
               void run() {
                   alertDialog.setMessage("Streaming data...");
               }
           });
       }
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...