gpt4 book ai didi

android - 带有 Activity 的 ViewPager 和 Fragment 生命周期

转载 作者:行者123 更新时间:2023-11-29 01:22:58 24 4
gpt4 key购买 nike

我正在使用一个 Activity,它有一个包含 2 个 fragment 的 ViewPager,寻呼机处理程序是 FragmentPagerAdapter 的一些实现。

据我了解,寻呼机适配器处理其中 fragment 的生命周期。

  • 我发现我的 Activity onResume() 方法已被调用,但 fragment onStart() 方法甚至没有启动。我到底该如何解决?它破坏了 Activity 和 fragment 之间的整个生命周期交互点......

  • 由于寻呼机适配器处理 Fragment 的生命周期,这是否意味着我不能再依赖于与 Activity 的交互?我的意思是,如果我希望 ActivityonResume() 但在 Fragment onStart() 之后执行某些操作> 被调用了,我就是做不到...

已编辑:

为了清楚起见:谷歌表示 activity 和 fragment 的生命周期是一起进行的,一旦一个被调用,另一个也会被调用,例如

  1. Activiy -> onCreate() ,然后是 Fragment -> onCreate()

  2. Activiy -> onResume() ,然后是 Fragment -> onResume()

但是!就我而言,我得到:Activity -> onCreate() -> onStart() -> onResume() -> onPostResume ()

然后: fragment -> onAttach() -> onCreateView() -> ... ->onResume()

需要说明的是,我使用的是寻呼机适配器(不是“状态”寻呼机),我的应用程序中有一个抽象的基础 Activity ,所有 Activity 都应该扩展。

public abstract class AbsLoginAppCompatActivity extends AppCompatActivity {
.............
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "*******************onCreate");
//do some general stuff like check for updates on server
}

在我的扩展 Activity 中:

public class A extends AbsLoginAppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG, "*******************onCreate");
setContentView(R.layout.activity_a);
//also set pager + adapter + give it getSupportFragmentManager()
}

我正在使用:

android.support.v4.view.ViewPager

android.support.v4.app.FragmentPagerAdapter

android.support.v4.app.Fragment

android.support.v7.app.AppCompatActivity(用于 abs Activity )

最佳答案

Fragment[State]PagerAdapter 使用 Activity FragmentManager - 或者在父 fragment 中嵌套 ViewPager 的情况下 - 该 fragment 的子 fragment FragmentManager 来管理 fragment ,就像普通 fragment 一样。实际上,这些适配器实现所做的唯一一件事就是它们为您隐藏了讨厌的 FragmentTransaction 内容。

我从来没有遇到过在我的 fragment 中没有为我调用特定生命周期回调的问题,所以我对此无话可说。但是,有一点很重要,但很多人都弄错了,那就是适配器的 getItem() 方法仅在新创建 fragment 时调用;如果它从保存的状态恢复,则不会再次调用此方法,人们倾向于在那里做所有花哨的事情来初始化他们刚刚“创建”的 fragment ,而他们应该真正查看 instantiateItem(),这要么返回您通过 getItem() 为适配器提供的实例,要么返回为您自动重新创建的 fragment 的引用。

关于分页器中的 fragment ,另一件值得了解的事情是方法 setUserVisibleHint(boolean)。由于 fragment 通常是一次性(非状态适配器)或按需(状态适配器)重新创建和恢复的,因此知道一个实例何时对用户实际可见通常很重要。这可以通过覆盖自定义 fragment 中的上述方法来实现。

关于android - 带有 Activity 的 ViewPager 和 Fragment 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com