Ich habe mehrere Fragmente in einer Aktivität. Bei einem Klick auf eine Schaltfläche starte ich ein neues Fragment und füge es dem Backstack hinzu. Ich habe natürlich erwartet, dass die onPause()
Methode des aktuellen Fragments und onResume()
des neuen Fragments aufgerufen wird. Nun, es passiert nicht.
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();
}
}
Was ich erwartet hatte, war:
- Wenn der Knopf angeklickt wird, LoginFragment wird mit ersetzt
HomeFragment ,
onPause()
von LoginFragment undonResume()
von HomeFragment wird aufgerufen - Bei der Wiedergabe gedrückt wird, HomeFragment wird poped und LoginFragment gesehen wird , und
onPause()
von HomeFragment undonResume()
von LoginFragment aufgerufen wird.
Was ich bekomme ist,
- Wenn Sie auf die Schaltfläche klicken , ersetzt HomeFragment LoginFragment korrekt . OnResume () von HomeFragment wird aufgerufen, onPause () von LoginFragment wird jedoch nie aufgerufen.
- Wenn Sie zurück drücken, wird HomeFragment korrekt angezeigt , um LoginFragment anzuzeigen . OnPause () von HomeFragment wird aufgerufen, onResume () von LoginFragment wird jedoch nie aufgerufen.
Ist das das normale Verhalten? Warum ist onResume()
das LoginFragment nicht genannt wird , wenn ich die Zurück - Taste drücken.