Я запускаю поток во фрагменте и использую интерфейсный вызов для @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();
}