小编典典

在后台堆栈上不调用片段 onResume() 和 onPause()

all

我在一个活动中有多个片段。在一个按钮上单击我开始一个新的片段,将它添加到后台堆栈。我自然希望调用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();
  }
}

我所期待的是,

  1. 单击按钮时,LoginFragment 被* HomeFragment 替换 , LoginFragmentonPause()和HomeFragment 调用 onResume() ***
  2. 当按下返回时,会 弹出 HomeFragment* 并看到 LoginFragmentonPause(),并调用 HomeFragmentLoginFragmentonResume() *

我得到的是,

  1. 单击按钮时, HomeFragment* 正确替换 LoginFragment ,调用 HomeFragment 的 onResume() , 但从不调用 LoginFragment onPause() 。 *
  2. 按下后, HomeFragment 正确弹出以显示 LoginFragment , HomeFragment 的 onPause()被调用,但 LoginFragment 的 onResume() 永远 不会 被调用。

这是正常的行为吗?为什么当我按下后退按钮时没有调用onResume()LoginFragment


阅读 70

收藏
2022-06-15

共1个答案

小编典典

只有在调用活动或时才会调用片段onResume()或。它们与.onPause()``onResume()``onPause()``Activity

阅读本文的处理片段生命周期部分

2022-06-15