【问题标题】:how to force method execution to finish before returning the fragment view如何在返回片段视图之前强制方法执行完成
【发布时间】:2018-02-14 21:23:00
【问题描述】:

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

【问题讨论】:

    标签: android android-fragments fragment-oncreateview


    【解决方案1】:

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

    【讨论】:

    • 按照代码顺序,方法“getPlayerList”将在使用变量之前返回值,但实际发生的是运行调用“getPlayerList”,然后在方法完成执行之前继续。跨度>
    • @Haifa 你用什么API调用?
    【解决方案2】:

    不要在主线程中请求和等待。首先将该视图变量保留为字段而不是本地。然后将您的请求移至onViewCreated 方法。最后使用回调而不是返回值,并在后台线程中执行所有请求。您可以使用 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

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

    【讨论】:

    • 如果您需要任何澄清,请发表评论,以便我更新我的答案
    • 感谢您的重播,但是“使用回调而不是返回值”是什么意思,我必须在“onCreateView”中初始化视图以在返回之前在某些语句中使用它,并且'onViewCreated' 是一个 void 方法。
    • 不需要初始化视图。只需按您创建的方式创建即可。但稍后设置值。等等,我会附上一个例子
    • 解决问题需要了解的东西太多了。请参阅改造教程。还看到一些开源代码和异步和同步问题。改造的好处是它将处理问题的线程和异步部分。检查答案的更新
    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 2018-02-08
    • 2016-03-13
    • 1970-01-01
    • 2018-06-25
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多