我的 Activity 加载一个 fragment 并启动一个 AsyncTask。
class GetParkingAreasAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... args) {
return mRepository.getParkingAreas(mContext.getActiveUser());
}
@Override
protected void onPostExecute(String value) {
for (int i=0; i<mContext.getActiveUser().getParkingAreas().size(); i++){
Log.i(TAG_areas, "parking area " + i +": " + mContext.getActiveUser().getParkingAreas().get(i).getName());
}
}
}
Activity 中的这个异步任务加载一些数据(我存储在上下文中)。当它完成时,如何在 fragment 中重新加载 UI 以显示加载的数据(在父 Activity 中)?
最佳答案
onPostExecute 已经在 UIThread 中运行,因此您只需要 fragment 来调用您的 Activity。我通常这样做的方法是为 fragment 定义一个接口(interface)。 像这样:
public interface YourFragmentListener {
void onParksLoaded(List<String> names)
}
然后在您的 Activity 中:
public class YourActivity implements YourFragmentListener {
@Override
void onParksLoaded(List<String names) {
// Do something with the names
yourField.setText(names.get(0))
}
}
最后在你的 fragment 中你可以像这样使用它:
@Override
protected void onPostExecute(String value) {
((YourFragmentListener) getActivity()).onParksLoaded(value)
}
当然,您可以更改类型以更好地适合您的用例。请注意强制转换,如果您在未实现 YourFragmentListener 的 Activity 中使用此 fragment ,它将引发异常
关于java - 当activity中的asynctask完成时如何重新加载fragment中的ui?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45361689/