作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,当 Activity 启动时,我必须将帐户列表从一个 fragment 发送到另一个 fragment 。我在以下线程中获取帐户列表,并将其保存在全局 ArrayList 中。如果对服务器的请求正确,ArrayList 就会填充必要的信息。然后,我在通过 bundle 将数据从一个 fragment 传输到另一个 fragment 之前调用 loadAccounts 方法。问题是,在我想在 fragment 之间发送数据之前,线程无法完成执行,因此发送数据时 ArrayList 将为 NULL。如何让应用程序等待线程执行,然后才将数据发送到另一个 fragment ?
我的线程如下所示:
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();
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
您不想让您的应用程序等待,因为这会使您的应用程序变慢,甚至在出现错误时卡住。
不要通过 bundle 发送您的帐户。相反,在您的 AccountsFragment 中创建一个方法
public void setAccounts(ArrayList<Account> accounts){
//do whatever you need with your accounts here
}
然后在你的handleResult方法中当你有一个SUCCESSFUL_CODE时,运行
fragment.setAccounts((ArrayList<Account>) accounts);
当然,要执行此操作,请确保您的 AccountFragment fragment 是一个字段,而不是 onCreate 中的局部变量。还要确保在运行线程之前实例化 Fragment
关于java - 如何让应用程序等待线程执行完毕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301217/
我是一名优秀的程序员,十分优秀!