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充当片段管理器,我猜它会根据需要创建页面(片段)。但是如果是这样的话,如果它破坏了整个生命周期,那么使用它有什么意义呢!?