我在一个activity里有多个碎片。在一个按钮点击我开始一个新的片断,将它添加到backstack。我自然希望调用当前片段的onpause()
方法和新片段的onresume()
。但这并没有发生。
public class LoginFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.login_fragment, container, false);
final FragmentManager mFragmentmanager = getFragmentManager();
Button btnHome = (Button)view.findViewById(R.id.home_btn);
btnHome.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
HomeFragment fragment = new HomeFragment();
FragmentTransaction ft2 = mFragmentmanager.beginTransaction();
ft2.setCustomAnimations(R.anim.slide_right, R.anim.slide_out_left
, R.anim.slide_left, R.anim.slide_out_right);
ft2.replace(R.id.middle_fragment, fragment);
ft2.addToBackStack("");
ft2.commit();
}
});
}
@Override
public void onResume() {
Log.e("DEBUG", "onResume of LoginFragment");
super.onResume();
}
@Override
public void onPause() {
Log.e("DEBUG", "OnPause of loginFragment");
super.onPause();
}
}
public class HomeFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.login_fragment, container, false);
}
@Override
public void onResume() {
Log.e("DEBUG", "onResume of HomeFragment");
super.onResume();
}
@Override
public void onPause() {
Log.e("DEBUG", "OnPause of HomeFragment");
super.onPause();
}
}
我所期待的是,
onPause()
以及HomeFragment的onResume()
将被调用onPause()
和LoginFragment的onResume()
。我得到的是,
这是正常的行为吗?为什么当我按下后退按钮时,LoginFragment的onResume()
没有被调用。
FT2.replace()
,因此将调用FragmentTransaction.Remove()
方法,并删除LoginFragment
。请参阅此。因此将调用loginfragment
的onstop()
而不是onpause()
。(新片断将完全替换旧片断)。FT2.AddToBackStack()
,LoginFragment
的状态将保存为一个包,并且当您单击HomeFragment
中的“上一步”按钮时,将调用OnViewStateRestord()
,然后调用LoginFragment
的OnStart()
。因此最终不会调用onResume()
。只有在调用活动onresume()
或onpause()
时,才会调用片段onresume()
或onpause()
。它们与activity
紧密耦合。
请阅读本文的“处理片段生命周期”一节。
在使用带有片段的时,在选项卡之间移动时不会调用我们的和方法。我们有什么办法可以从碎片中找出我们是被发现还是被隐藏? 不幸的是,我在、中有逻辑,就像在location services注册一样,在切换选项卡时永远不会停止,因为在退出整个应用程序之前,永远不会调用。
我的主要活动是装载不同的碎片。此外,可以从MainActivity打开设置-activity。 如果用户只是在片段之间切换,那就万事大吉了。 当打开设置-activity并返回MainActivity时,onResume和onPause会被调用两次。如果用户打开设置-activity并再次返回MainActivity,onResume和onPause将被调用三次。每次用户打开“设置-activit
在我们的应用程序中,我们有一个带有FrameLayout的活动。这个布局显示了几个片段。要在片段之间进行更改,我们使用以下方法: 如果用该方法更改片段,一切都将正常工作。不幸的是,问题是后退按钮似乎被打破了。如果我们在其中一个片段处按下它,FrameLayout将正确更新。但碎片不会被摧毁。Android不调用onPause()、onStop()和OnDestroyView()方法。因此,操作栏没
我使用带有ViewPager的FragmentPagerAdapter来切换片段 那么我如何使片段调用它们的onResume()呢?
我有点进退两难,不知道该怎么解决。情况是这样的... 我有一个多activity应用程序,播放音乐从它开始的时间到应用程序退出的时间。 但是,如果我使用onPause/onResume来检测activity何时被发送到后台,并在onPause中暂停音乐,在onResume中恢复播放,那么当我启动下一个activity时,音乐会短暂地“跳过”,因为调用startActivity()后,主叫activ
我有一个有3个选项卡的ViewPager。根据我所看到的情况,当容器活动开始时,前两个片段将处于恢复状态。我还注意到,只有并排的两个片段被恢复,第三个被停止。我遇到的问题是,我从网络加载数据用于第一个片段,并将自定义对象存储在一个ArrayList中,这很正常,但当我导航到第三个片段时,数据会随着第一个片段进入停止状态而丢失。因此,当从第三个片段导航回第一个片段时,ArrayList就会为空(我在