Tengo un fragmento múltiple dentro de una actividad. Al hacer clic en un botón, estoy comenzando un nuevo fragmento, agregándolo al backstack. Naturalmente, esperaba que se llamara al onPause()
método del Fragmento actual y al onResume()
nuevo Fragmento. Pues no está pasando.
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();
}
}
Lo que esperaba era
- Cuando se hace clic en el botón, LoginFragment se reemplaza con
HomeFragment ,
onPause()
de LoginFragment yonResume()
de HomeFragment se llama - Cuando se presiona la espalda, HomeFragment se poped y LoginFragment se ve, y
onPause()
de HomeFragment yonResume()
de LoginFragment se llama.
Lo que estoy obteniendo es
- Cuando se hace clic en el botón, HomeFragment reemplaza correctamente LoginFragment , se llama a onResume () de HomeFragment , pero nunca se llama a onPause () de LoginFragment .
- Cuando se vuelve a presionar, HomeFragment aparece correctamente para revelar LoginFragment , se llama a onPause () de HomeFragment , pero onResume () de LoginFragment nunca se llama.
¿Es este el comportamiento normal? ¿Por qué es onResume()
de LoginFragment no conseguir llama cuando se presiona el botón de retroceso.