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

时间:2018-02-14 21:23:00

标签: android android-fragments fragment-oncreateview

在我的代码中假设我想在片段中显示一些字符串,方法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; }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

从谷歌的MVP结构中查看此示例。在方法中创建的视图,但ui的值稍后在另一个方法中设置。例如,请参阅设置描述textview的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

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