Eu tenho vários fragmentos dentro de uma atividade. Em um botão, estou iniciando um novo fragmento, adicionando-o ao backstack. Eu naturalmente esperava que o onPause()
método do fragmento atual e onResume()
do novo fragmento fosse chamado. Bem, isso não está acontecendo.
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();
}
}
O que eu esperava era
- Quando o botão é clicado, o LoginFragment é substituído por
HomeFragment ,
onPause()
de LoginFragment eonResume()
de HomeFragment chamado - Quando volta é pressionado, HomeFragment é poped fora e LoginFragment é visto, e
onPause()
de HomeFragment eonResume()
de LoginFragment é chamado.
O que estou recebendo é,
- Quando o botão é clicado, o HomeFragment está substituindo corretamente o LoginFragment , onResume () do HomeFragment é chamado, mas a onPause () do LoginFragment nunca é chamada.
- Quando pressionado novamente, o HomeFragment aparece corretamente para revelar o LoginFragment , a onPause () do HomeFragment é chamada, mas o onResume () do LoginFragment nunca é chamado.
Esse é o comportamento normal? Por que é onResume()
de LoginFragment não ser chamado quando pressiono o botão de volta.