使用视图寻呼机时,片段的onCreateView()方法调用的顺序是什么



我发现视图寻呼机有一个非常奇怪的行为。在使用FragmentPagerAdapter时,我观察到getItem()的调用顺序正确,即位置0、位置1、位置2。。。。。。但是onCreateView()按相反的顺序调用,即位置2、位置1、位置0。(假设viewpager保持3个屏幕外页面)我认为,Viewpager以某种方式维护了这些片段的堆栈。当它需要创建视图时,它会从堆栈中弹出最活跃的片段,并使其调用onCreateView()。

所以我的问题是,我们可以控制onCreateView()的调用顺序吗?如果没有,我可以对调用onCreateView()时发出的网络请求进行排序吗?这样,应该先执行片段0网络请求,然后执行片段1,再执行片段2。但我认为这会造成另一个问题,因为我在网络请求完成后执行与UI相关的任务,如果到目前为止还没有调用onCreateView(),那么UI元素可能不会初始化。那么,让这些网络调用按正确的顺序进行的最佳方法是什么呢?即,对于片段0,然后是1,然后是2,依此类推……

由于onCreateView()是一种生命周期方法-我不认为你可以"修改顺序"-相反,你应该围绕片段/活动生命周期概念化你的设计,这样你就知道什么时候应该做什么。此外,在执行与UI相关的任务方面,您应该在onActivityCreated中执行此操作。创建主机活动时,此方法在onCreateView()方法之后调用。已经创建了活动和片段实例以及活动的视图层次结构。此时,可以使用findViewById()方法访问视图。

在您的情况下,如果您想执行一些UI操作,请这样做(对于每个Fragment:

public void onActivityCreated(Bundle savedInstanceState) {  
    super.onActivityCreated(savedInstanceState);
    View rooView = getView();
    //here you can do your UI related tasks
}

关于创建碎片的顺序,请遵循此处的讨论,因为它们处理的是与您的用例密切相关的用例。

我不确定,但我认为您无法通过切换适配器填充tabview来控制订单。更重要的是,你不应该控制它。碎片应该尽可能独立。因此,在调用onCreateView之后启动您的网络请求,在活动中只存储您将在所有3个片段中使用的数据。若您的网络请求将为所有三个片段提供数据,那个么在请求完成时刷新片段(使用接口)。

最新更新