我在一个活动中有多个片段。在一个按钮上单击我开始一个新的片段,将它添加到后台堆栈。我自然希望调用onPause()
current Fragment 和onResume()
new Fragment 的方法。那么它没有发生。
登录片段.java
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();
}
}
HomeFragment.java
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();
}
}
我所期待的是,
- 单击按钮时,LoginFragment被HomeFragment替换
,LoginFragment
onPause()
和HomeFragment 被调用onResume()
- 当按下返回时,会弹出 HomeFragment并看到LoginFragment
onPause()
,并调用HomeFragment和LoginFragment 。onResume()
我得到的是,
- 单击按钮时,HomeFragment正确替换 LoginFragment,调用 HomeFragment 的 onResume() ,但从不调用 LoginFragment的onPause() 。
- 按下后,HomeFragment正确弹出以显示 LoginFragment, HomeFragment 的 onPause()被调用,但 LoginFragment 的 onResume()永远不会被调用。
这是正常的行为吗?为什么当我按下后退按钮时没有调用onResume()
LoginFragment 。