当前位置: 首页 > 知识库问答 >
问题:

使用视图分页器时,片段的onCreateView()方法调用的顺序是什么?

云镜
2023-03-14

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

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

共有1个答案

娄森
2023-03-14

由于onCreateView()是一个生命周期方法--我不认为您可以“修改顺序”--相反,您应该围绕片段/活动生命周期概念化您的设计,以便您知道何时应该做什么。同样就执行UI相关任务而言,您应该在OnActivityCreated中执行该操作。创建宿主活动时,在OnCreateView()方法之后调用此方法。活动和片段实例以及活动的视图层次结构已经创建。此时,可以使用findViewById()方法访问视图。

在您的情况下,如果要执行某些UI操作,请执行以下操作(对于每个片段:

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

就创建片段的顺序而言,请遵循这里的讨论,因为它们处理的用例与您的用例密切相关。

 类似资料:
  • 我正在使用带有片段的FragmentPagerAdapter。我的问题是,当我调用setCurrentItem时,正在加载的片段的OnCreateView方法被调用两次。但是,需要注意的是,片断不是重新创建的,而是简单地恢复的。我非常想找到一个解决方案,使OnCreateView只能被调用一次。 两次调用Android oncreateview OnCreateView多次调用/使用ActionB

  • 我使用在之间切换,但是我可以使用在简单XML布局之间切换吗? 这是ViewPager的页面,用于在片段之间滑动: 这是我的提示片段: 如何修改代码以使用视图而不是片段?

  • 问题内容: 假设我的web.xml中有以下内容 如果请求以/XYZ/abc.do的形式出现,过滤器的调用顺序是什么?为什么? 问题答案: 按照其映射在web.xml中定义的顺序 如果使用注释(),则顺序似乎未定义 -您仍必须在web.xml中声明条目。

  • 当我在viewPager中从其相邻片段(0,2)中滑动到或选择Fragment1(片段编号为0-3)时,它的onCreateView或onCreate函数未被调用。 但是当我从Fragment3回扫或者选择Fragment1(当Fragment3是活动的)时,这两个函数都被调用了。我很困惑为什么不从相邻的片段中调用它。 这是未正确调用onCreateView的片段的代码 //Toast.MakeT

  • Android片段找不到ID的视图? 找不到id 0x7F090005的视图 找不到片段id的视图 你能告诉我我做错了什么吗?