在我的代码中假设我想在片段中显示一些字符串,方法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; }
答案 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
您在方法中获得了价值,您可以使用视野设置该值。