我在一个活动中有多个片段.点击一个按钮,我开始一个新的片段,将其添加到Backback中.我自然希望调用当前片段的onPause()个方法和新片段的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();
  }
}

家庭碎片.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();
  }
}

我所期待的是,

  1. 当点击按钮时,LoginFragment被替换为
  2. 当按BACK时,弹出HomeFragment,弹出LoginFragment 已见,HomeFragment项中的onPause()项和LoginFragment项中的onResume()项 会接到电话.

我得到的是,

  1. 当点击按钮时,HomeFragment正确替换
  2. 向后按时,HomeFragment正确弹出以显示 LoginFragment,调用onPause()(共HomeFragment个),但调用onResume() 从没有人打过电话给LoginFragment的人.

这是正常行为吗?为什么当我按下后退按钮时,LoginFragment中的onResume()没有被呼叫.

推荐答案

只有在调用活动onResume()onPause()时,才会调用片段onResume()onPause().

Handling the Fragment Lifecycle section of this article.

Android相关问答推荐

如何在Jetpack Compose中使用Box Composable来实现这种布局?

在Android上使用XSLT文件转换XML文件

泛型类型lambda函数参数作为函数参数

在卡片上创建圆角底部边框

Kotlin Android VS Kotlin多平台

找不到com.android.tools.build:gradle:8.0

android回收器查看点击事件无响应

在 Compose 中,当用户持续向下滚动时,LazyColumn 不会显示新项目

Color.Transparent 和 Color.Unspecified 之间的区别

当我想使用例如 material3 时,为什么我需要添加对 material 的依赖?底部导航?

为什么我收到这个错误我需要安装 android studio

Android Studio:按下前缀键:切换 Logcat 格式

React Native Android 应用程序在调试模式下运行良好,但当我们发布 apk 时,它会生成旧版本的应用程序

如何在jetpack compose中通过lamda返回columnScope/RowScope

viewModel 的可变值状态不起作用

如何限制键盘输入键不允许在下一行输入(Android Jetpack Compose 中的 TextField)

如何对齐文本和图标可组合,以便即使在文本溢出后它们也能保持在一起?

在android studio中使用wifi配对设备的问题

如何授予对 Uri 图像的永久权限(androidx)

如何使用 recyclerview 实现这样的布局?