Android ViewPager和带有活动的片段生命周期

Android ViewPager和带有活动的片段生命周期,android,android-fragments,android-viewpager,android-lifecycle,Android,Android Fragments,Android Viewpager,Android Lifecycle,我正在使用一个活动,它有一个ViewPager包含2个片段,寻呼机处理程序是FragmentPagerAdapter的一些实现 据我所知,寻呼机适配器处理其中片段的生命周期 我发现我的ActivityonResume()方法已经被调用,但是片段onStart()方法甚至没有启动。 我到底怎么才能解决这个问题呢?它破坏了活动和片段之间的整个生命周期交互点 由于寻呼机适配器处理片段的生命周期,这是否意味着我不能再依赖与活动的交互?我的意思是,如果我想让活动在onResume()中做些什么,但是在调

我正在使用一个
活动
,它有一个
ViewPager
包含2个片段,寻呼机处理程序是
FragmentPagerAdapter
的一些实现

据我所知,寻呼机适配器处理其中片段的生命周期

  • 我发现我的Activity
    onResume()
    方法已经被调用,但是片段
    onStart()
    方法甚至没有启动。 我到底怎么才能解决这个问题呢?它破坏了活动和片段之间的整个生命周期交互点

  • 由于寻呼机适配器处理
    片段的生命周期,这是否意味着我不能再依赖与
    活动的交互?我的意思是,如果我想让
    活动
    onResume()
    中做些什么,但是在调用
    片段
    onStart()
    之后,我就做不到了

编辑:

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()
}
要说清楚: 谷歌表示,活动和片段的生命周期是同时进行的,一旦一个被调用,另一个也会被调用,例如

  • Activiy
    ->
    onCreate()
    ,然后,
    Fragment
    ->
    onCreate()

  • Activiy
    ->
    onResume()
    ,然后,
    Fragment
    ->
    onResume()

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

    然后:
    Fragment
    ->
    onAttach()
    ->
    onCreateView()
    ->…-><代码>重新开始()

    更清楚的是,我使用的是一个寻呼机适配器(不是“状态”寻呼机),我的应用程序中有一个抽象的基本活动,所有活动都应该扩展

    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
    }
    
    在我的扩展活动中:

    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活动)

    片段[状态]页面编辑器
    使用活动
    片段管理器
    -或者如果父片段中嵌套了
    视图页面
    ,则该片段的子片段
    片段管理器
    来管理片段,就像普通碎片一样。实际上,这些适配器实现所做的唯一一件事就是为您隐藏讨厌的
    FragmentTransaction
    东西

    我从来没有遇到过这样的问题,即在我的片段中没有调用特定的生命周期回调,所以对此我不能说任何话。然而,有一点很重要,需要理解,很多人都会弄错,那就是适配器的
    getItem()
    方法只有在新创建片段时才被调用;如果从已保存状态还原,则不会再次调用此方法,人们倾向于在那里做所有花哨的事情来初始化他们刚刚“创建”的片段,同时他们应该真正查看
    instanceItem()
    ,它或者返回您通过
    getItem()给适配器的实例
    或返回自动为您重新创建的片段的引用


    了解寻呼机中片段的另一件事是方法
    setUserVisibleHint(boolean)
    。由于片段通常一次重新创建和恢复(非状态适配器)或按需恢复(状态适配器),因此了解一个实例对用户实际可见的时间通常很重要。这可以通过在自定义片段中重写上述方法来实现。

    发布代码。无法诊断我们看不到的内容。顺便说一下,适配器不处理片段的生命周期。它通常会在必要时通过getFragment()方法创建它们。我不太确定我是否理解您在答案中寻找的内容……问题很简单,Activity onCreate+onStart+OnResume+onPostResume会被调用,只有在完成这些操作后,才会调用片段onAttach+onCreateView+。+onResume等被调用。那么我错过了什么?当调用Activity onStart时,还需要调用片段onStart,然后当调用onResume时,还需要调用片段onResume。。。。。我使用的是FragmentPagerAdapter,而不是“状态”适配器如果您想在onResume()中(在活动中)执行某些操作,但在调用片段的onStart()后,您可以从片段(在onResume()方法中)调用getActivity(),将其转换到具体的活动中,并从活动中调用任何方法。我上面的答案更好地解释了我的意思。我认为答案隐藏在FragmentPagerAdapter的某个地方,因为FragmentPagerAdapter充当片段管理器,我猜它会根据需要创建页面(片段)。但是如果是这样的话,如果它破坏了整个生命周期,那么使用它有什么意义呢!?