Какой поток выполняет метод "@override", вызываемый прослушивателем интерфейса в отдельном потоке? - PullRequest
0 голосов
/ 19 сентября 2019

Я запускаю поток во фрагменте и использую интерфейсный вызов для @Override метода во фрагменте, запускающего поток.Этот @Override останавливает ProgressDialog и изменяет текст TextView во фрагменте.

Когда я делаю то же самое в действии, проблем не возникает, но теперь при использовании фрагмента я получил «единственный поток, который создаетПредставление может касаться его представлений "- Ошибка.Поэтому я использовал getActivity().runOnUiThread(runnable) и разместил код в MainThread, но зачем мне это делать, поскольку он работает в Activity без этого?Я сделал ошибку?

Поток

//interface
private ConnectToDevice connectToDevice;

//C-Tor
public Thread_ConnectToDevice(BluetoothDevice device, ConnectToDevice connectToDevice ) {
    this.mBluetoothDevice = device;
    this.connectToDevice = connectToDevice;
  }
//call
connectToDevice.connectionSuccess(false, null);

Фрагмент

//make Thread
 thread_connectToDevice = new Thread_ConnectToDevice(mBluetoothDevice, Fragment_RoutineStartConnection_setPassword.this);
thread_connectToDevice.start();

//CallBack
//Thread Connect Success
  @Override
  public void connectionSuccess(final Boolean bSuccess,final BluetoothSocket mSocket) {
    getActivity().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        if(bSuccess){
          mProgessDialog.setTitle(R.string.tv_Fragmentsetpassword_Connected_CheckPW);
          if(thread_connectedToDevice != null){
            if(thread_connectedToDevice.isAlive()){
              thread_connectedToDevice.interrupt();
            }
          }
          thread_connectedToDevice = new Thread_ConnectedToDevice(mSocket, sTryingDonglePassword);
          thread_connectedToDevice.start();

        }else{
          mProgessDialog.dismiss();
          tv_Fragmentsetpassword_userhint
              .setTextColor(getResources().getColor(R.color.Mercedes_RED, null));
          tv_Fragmentsetpassword_userhint.setText(R.string.tv_Fragmentsetpassword_ConnectionFailed);
        }
      }
    });
  }

У меня такое ощущение, что я передал неверный экземпляр слушателя в поток.

На вопрос, это обратный вызов, реализованный таким же образом, но в Activity: Thread

//listener
private Finished_AskingForInformation listener;

//C-Tor
public Td_AskForInformation(
      Finished_AskingForInformation listener) {
    this.listener = listener;
  }

//call
listener.AskingFinished();

Activity

//Create and start thread
td_askForInformation = new Td_AskForInformation(this);
    td_askForInformation.start();

//CallBack
@Override
  public void AskingFinished() {
    mProgressDialog.dismiss();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...