J'ai plusieurs fragments à l'intérieur d'une activité. Sur un bouton, cliquez sur Je commence un nouveau fragment, en l'ajoutant à backstack. Je m'attendais naturellement à ce que la onPause()
méthode du Fragment actuel et onResume()
du nouveau Fragment soit appelée. Eh bien, cela ne se produit pas.
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();
}
}
Ce à quoi je m'attendais, c'était,
- Lorsque le bouton est cliqué, LoginFragment sera remplacé par
HomeFragment ,
onPause()
de LoginFragment etonResume()
de HomeFragment est appelé - Lorsque back est pressé, HomeFragment est sorti et LoginFragment est vu, et
onPause()
de HomeFragment etonResume()
de LoginFragment est appelé.
Ce que je reçois est,
- Lorsque le bouton est cliqué, HomeFragment remplace correctement LoginFragment , onResume () de HomeFragment est appelé, mais onPause () de LoginFragment n'est jamais appelé.
- Lorsque vous appuyez à nouveau, HomeFragment apparaît correctement pour révéler LoginFragment , onPause () de HomeFragment est appelé, mais onResume () de LoginFragment n'est jamais appelé.
Est-ce le comportement normal? Pourquoi onResume()
de LoginFragment pas appelé quand j'appuie sur le bouton de retour.