如何在返回片段视图之前强制方法执行完成

how to force method execution to finish before returning the fragment view

在我的代码中可以说我想在片段中显示一些字符串,方法 getPlayerList 需要 2 秒(来自 API 的数据),但是方法 'onCreateView' 在 'getPlayerList' 执行完毕。

我尝试了很多方法来实现它,但是每样东西都没有用,因为我无法更改 'return view;' 地方 ^^"。

有什么方法可以代替 'onCreateView' 适合我的情况吗?

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_tab4, container, false);

String result = getPlayerList();
//displaying the 'result' on this view

return view; }

不要在主线程中请求和等待。首先将该视图变量保留为字段而不是本地变量。然后将您的请求移至 onViewCreated 方法。最后使用回调而不是 return 值并在后台线程中执行所有请求。您可以使用 Volley 或 Retrofit 进行高级联网。也因为你必须等到从服务器得到结果,然后在设置空字符串之前用占位符填充 UI。

检查 google 中 MVP 结构中的这个例子。在方法中创建的视图,但 ui 的值稍后在另一个方法中设置。例如,请参阅设置描述文本视图的 showDescription 方法 https://github.com/googlesamples/android-architecture/blob/todo-mvp/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailFragment.java

关于回调,请参阅 Retroift 中的此 public void success 方法。 https://futurestud.io/tutorials/retrofit-getting-started-and-android-client

您在方法中获取值,您可以使用视图字段设置该值。

因此,正如我所见:您的问题是当您尝试使用 result 变量时它没有任何值? 如果是这样,请考虑仅在完成 ​​API 调用后才使用该变量,这样您的用户就不必等待 2 秒(或在某些情况下更长)。 您可以添加 ProgressBar 以指示您的用户正在进行某事。