Tôi có nhiều đoạn trong một hoạt động. Trên một nút bấm, tôi đang bắt đầu một đoạn mới, thêm nó vào backstack. Tôi tự nhiên mong đợi onPause()
phương thức của Fragment hiện tại và onResume()
Fragment mới sẽ được gọi. Vâng, nó không xảy ra.
Đăng nhậpFragment.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();
}
}
Những gì tôi mong đợi, là,
- Khi nút được nhấn vào, LoginFragment được thay thế bằng
HomeFragment ,
onPause()
của LoginFragment , vàonResume()
của HomeFragment được gọi - Khi trở lại được nhấn, HomeFragment được poped ra và LoginFragment được nhìn thấy, và
onPause()
của HomeFragment vàonResume()
của LoginFragment được gọi.
Những gì tôi đang nhận được là,
- Khi nút được nhấn vào, HomeFragment được thay thế một cách chính xác LoginFragment , onResume () của HomeFragment được gọi, nhưng onPause () của LoginFragment không bao giờ được gọi.
- Khi được nhấn lại, HomeFragment sẽ xuất hiện chính xác để hiển thị LoginFragment , onPause () của HomeFragment được gọi, nhưng onResume () của LoginFragment không bao giờ được gọi.
Đây có phải là hành vi bình thường? Tại sao là onResume()
của LoginFragment không nhận được gọi khi tôi bấm nút quay lại.