片段onResume()及在onPause()不叫上backstack不叫、片段、onPause、onResume

由网友(一 贱 倾 心)分享简介:我有一个活动内的多个片段。在点击一个按钮,我开始一个新的片段,将其添加到backstack。我自然希望当前片段的的onPause()方法和 onResume()新片段被调用。那么它是不会发生。I have multiple fragment inside an activity. On a button click...

我有一个活动内的多个片段。在点击一个按钮,我开始一个新的片段,将其添加到backstack。我自然希望当前片段的的onPause()方法和 onResume()新片段被调用。那么它是不会发生。

I have multiple fragment inside an activity. On a button click I am starting a new fragment, adding it to backstack. I naturally expected the onPause() method of current Fragment and onResume() of new Fragment to be called. Well it is not happening.

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();
  }
}

我所期待的,是,

What I expected, was,

点击按钮, LoginFragment 被替换 HomeFragment ,的onPause()的 LoginFragment 和 onResume()的 HomeFragment 被称为 在当前背面是pressed, HomeFragment 被弹出了和 LoginFragment 是 可见,和的onPause()的 HomeFragment 和 onResume()的 LoginFragment 被调用。 When button is clicked, LoginFragment gets replaced with HomeFragment, onPause() of LoginFragment, and onResume() of HomeFragment gets called When back is pressed, HomeFragment is poped out and LoginFragment is seen, and onPause() of HomeFragment and onResume() of LoginFragment gets called.

我所得到的是,

点击按钮, HomeFragment 正确更换 LoginFragment ,onResume(中) HomeFragment 被调用,但在onPause() 对 LoginFragment 永远不会被调用。 当回pressed, HomeFragment 正确弹出来揭示 LoginFragment 的,在onPause() HomeFragment 被调用,但是onResume() 对 LoginFragment 永远不会被调用。 When button is clicked, HomeFragment is correctly replacing LoginFragment, onResume() of HomeFragment is called, but onPause() of LoginFragment is never called. When back pressed, HomeFragment is correctly popping to reveal LoginFragment, onPause() of HomeFragment gets called, but onResume() of LoginFragment never gets called.

这是正常的行为呢?为什么 onResume()的 LoginFragment 没有得到所谓的,当我preSS后退按钮。

Is this the normal behaviour? Why is onResume() of LoginFragment not getting called when I press the back button.

推荐答案

片段 onResume()的onPause()将被称为只有当活动 onResume()的onPause()被调用。 他们紧密地耦合到活动

The fragments onResume() or onPause() will be called only when the Activities onResume() or onPause() is called. They are tightly coupled to the Activity.

阅读处理这篇文章的片段生命周期部分。

Read the Handling the Fragment Lifecycle section of this article.

阅读全文

相关推荐

最新文章