Ho più frammenti all'interno di un'attività. Con un clic sul pulsante sto iniziando un nuovo frammento, aggiungendolo allo backstack. Mi aspettavo naturalmente che fosse chiamato il onPause()
metodo dell'attuale frammento e onResume()
del nuovo frammento. Beh, non sta succedendo.
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();
}
}
Quello che mi aspettavo era
- Quando si fa clic sul pulsante, LoginFragment viene sostituito con
HomeFragment ,
onPause()
di LoginFragment eonResume()
di HomeFragment vengono chiamati - Quando si preme di nuovo, HomeFragment è poped fuori e LoginFragment è visto, e
onPause()
di HomeFragment eonResume()
di LoginFragment viene chiamato.
Quello che sto ottenendo è
- Quando si fa clic sul pulsante, HomeFragment è correttamente sostituendo LoginFragment , onResume () di HomeFragment si chiama, ma onPause () di LoginFragment non viene mai chiamato.
- Quando torna premuto, HomeFragment sia correttamente popping per rivelare LoginFragment , onPause () di HomeFragment viene chiamato, ma onResume () di LoginFragment non viene mai chiamato.
È questo il comportamento normale? Perché onResume()
di LoginFragment non sempre chiamato quando si preme il pulsante indietro.