1. ホーム
  2. アンドロイド

[解決済み】フラグメント onResume() & onPause() がバックスタックで呼ばれない

2022-04-30 03:56:04

質問

アクティビティ内に複数のフラグメントがあります。ボタンをクリックすると、新しいフラグメントが開始され、バックスタックに追加されます。当然、私は onPause() メソッドと、現在のフラグメンテーションの 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();
  }
}

私が期待したこと、それは。

  1. ボタンがクリックされたとき。 ログインフラグメント に置き換えられます。 ホームフラグメント , onPause() LoginFragment onResume() ホームフラグメント と呼ばれる
  2. バックが押されたとき ホームフラグメント がポップアウトされ ログインフラグメント は が表示され onPause() ホームフラグメント onResume() LoginFragment が呼び出される。

私が得ているものは

  1. ボタンがクリックされたとき。 ホームフラグメント が正しく置き換えられています。 ログインフラグメント のonResume()を使用します。 ホームフラグメント が呼び出されますが、onPause() の ログインフラグメント が呼ばれることはない。
  2. バックが押されたとき ホームフラグメント が正しくポップアップして ログインフラグメント のonPause()が必要です。 ホームフラグメント が呼び出されるが、onResume() の ログインセグメント は呼び出されない。

これは正常な動作なのでしょうか?なぜ onResume() LoginFragment 戻るボタンを押しても呼び出されない。

解決方法を教えてください。

フラグメント onResume() または onPause() が呼び出されるのは、アクティビティ onResume() または onPause() が呼び出されます。 これらは緊密に結合され Activity .

を読む この記事の「フラグメントのライフサイクルを処理する」のセクション .