我在一个 Activity 中有多个片段。在一个按钮上,单击“我正在开始一个新片段,将其添加到后堆栈”。我自然希望当前Fragment的onPause()方法和新Fragment的onResume()被调用。好吧,这没有发生。

LoginFragment.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 onPause() LoginFragment 和的onResume() HomeFragment 被称为
  • 按下后退时,会弹出 HomeFragment ,而 LoginFragment
    看到,以及 HomeFragment onPause()onResume() LoginFragment
    被叫。

  • 我得到的是
  • 单击按钮时, HomeFragment 正在正确替换
    LoginFragment ,被调用 HomeFragment 的onResume(),但是onPause()
    永远不会调用的LoginFragment
  • 按下后, HomeFragment 会正确弹出以显示
    LoginFragment HomeFragment 的onPause()被调用,但是onResume()
    LoginFragment 从未被调用。

  • 这是正常行为吗?为什么当我按下“后退”按钮时,无法调用 LoginFragment onResume()

    最佳答案

    仅当调用 Activity onResume()onPause()时,才会调用onResume()onPause()片段。
    它们与Activity紧密耦合。

    阅读Handling the Fragment Lifecycle section of this article

    关于android - fragment onResume()和onPause()不会在后堆栈上调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11326155/

    10-10 12:40