0

在我的代码中,假设我想在片段中显示一些字符串,方法 getPlayerList 需要 2 秒(来自 API 的数据),但方法 'onCreateView' 在 'getPlayerList' 完成执行之前返回视图。

我尝试以多种方式实现它,但每件事都是无用的,因为我无法更改“返回视图”;地方^^”。

有没有适合我情况的方法来代替“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; }
4

2 回答 2

1

所以,正如我所看到的:对您来说,问题是结果变量在您尝试使用它时没有任何值?如果是这样,请考虑仅在完成 ​​API 调用后使用该变量,这样您的用户就不必等待 2 秒(在某些情况下甚至更长时间)。您可以添加 ProgressBar 以指示您的用户正在进行某些操作。

于 2018-02-14T21:32:01.920 回答
0

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

在谷歌的 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

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

您在方法中获得价值,您可以使用视野设置该值。

于 2018-02-14T21:27:45.640 回答