java - 当activity中的asynctask完成时如何重新加载fragment中的ui?

标签 java android android-fragments android-activity android-asynctask

我的 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/

相关文章:

java - 在 Java 中创建一个 JSON 对象数组

java - 简单的 JNDI 上下文工厂?

java - 找出对象列表是否包含具有指定字段值的内容?

android - 将 FragmentTabHost 与 ViewPager 一起使用

android - 处理绘图/绘画/保存多个位图

java - 如何在IntelliJ中调试Vaadin应用程序

android - 将 facebook SDK 导入 cordova/phonegap 项目

Android ProGuard : Most Aggressive Optimizations

android - 如何在 Android 中获取当前的 SIM 卡号?

从 WebView 打开软输入时,Android 窗口不会调整大小/平移