我在一个 Activity 中有多个片段。在一个按钮上,单击“我正在开始一个新片段,将其添加到后堆栈”。我自然希望当前Fragment的onPause()
方法和新Fragment的onResume()
被调用。好吧,这没有发生。
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();
}
}
我所期望的是
HomeFragment ,的
onPause()
LoginFragment 和的onResume()
HomeFragment 被称为看到,以及 HomeFragment 的
onPause()
和的onResume()
LoginFragment 被叫。
我得到的是
LoginFragment ,被调用 HomeFragment 的onResume(),但是onPause()
永远不会调用的LoginFragment 。
LoginFragment , HomeFragment 的onPause()被调用,但是onResume()
的 LoginFragment 从未被调用。
这是正常行为吗?为什么当我按下“后退”按钮时,无法调用 LoginFragment 的
onResume()
。 最佳答案
仅当调用 Activity onResume()
或onPause()
时,才会调用onResume()
或onPause()
片段。
它们与Activity
紧密耦合。
阅读Handling the Fragment Lifecycle section of this article。
关于android - fragment onResume()和onPause()不会在后堆栈上调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11326155/