В моем приложении мне нужно отправить список учетных записей из одного фрагмента другому, когда начнется действие. Я получаю список учетных записей в следующем потоке, сохраняя его в глобальном ArrayList. Если запрос на сервер хорош, ArrayList заполняется необходимой информацией. Затем я вызываю метод loadAccounts перед передачей данных через пучок из одного фрагмента в другой. Проблема в том, что нить не доходит до завершения ее выполнения, прежде чем я хочу отправить данные между фрагментами, поэтому ArrayList будет NULL, когда данные будут отправлены. Как заставить приложение ждать, пока поток выполнится, и только после этого отправить данные другому фрагменту?Как заставить приложение ждать выполнения потока?
Мой поток выглядит следующим образом:
public void loadAccounts() {
LoadAccounts loadAccountsThread = new LoadAccounts(new Handler() {
public void handleResult(Result result) {
switch (result) {
case SUCCESSFUL_CODE:
accountsList = (ArrayList<Account>) accounts;
break;
case FAILED_CODE:
errorMsg = error.toString();
showDialog(errorMsg);
default:
break;
}
}
});
loadAccountsThread.start();
}
в то время как в методе OnCreate я это делаю:
loadAccounts();
Bundle args = new Bundle();
AccountsFragment fragment = new AccountsFragment();
args.putSerializable("accounts", accountsList.get(0));
fragment.setArguments(args);
getSupportFragmentManager().beginTransaction()
.replace(R.id.rightConent, fragment).commit();
Любая помощь будет оценена. Благодарю.
»Как заставить приложение ждать, пока поток выполнит?« - Темы, как правило, имеют метод «join». – theV0ID
Проверьте эту тему, я думаю, она содержит всю необходимую информацию. http://stackoverflow.com/questions/861346/in-java-how-do-you-determine-if-a-thread-is-running – SomeJavaGuy
Рассматривали ли вы использование 'Queue' или еще лучше' BlockingQueue '? – OldCurmudgeon