草庐IT

安卓 fragment : Lifecycle method *always* called when fragment is displayed?

coder 2023-11-30 原文

每当向用户显示 fragment 时,我都需要执行一些代码。

通过 API 查看我能看到的最接近的钩子(Hook)方法是 onResume。但是,从我的代码调试来看,当用户选择后退按钮返回到先前显示的 fragment 时,似乎 不会 调用 onResume。

只是为了澄清我所看到的行为:

我有一个“父” Activity ,它在 ActionBar 中配置选项卡...和 ​​2 个 fragment F1 和 F2。

用户选择一个选项卡,F1 被加载到 Activity 中。按下按钮后,用户可以导航至 F2。这不是一个单独的选项卡... F2 已交换到布局中。

添加日志语句,我可以看到当用户选择 F2 上的后退按钮时,会发生以下情况......

1) onPause() 在 F2 上被调用。 2) F1 已加载到 Activity 中...但 F1 上的 onResume() 未调用

此时日志中没有错误。

知道我在这里做错了什么吗?

提前致谢

尼尔。

最佳答案

好吧,这似乎是飞行员失误。我在 Activity fragment 之间切换的原始代码是......

public void switchFragment(Fragment newFragment, String tag) {
    getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, newFragment)
            .addToBackStack(tag)
            .commit();
}

上面代码中对add()的调用实际上应该是对replace()的调用。似乎不替换 Activity 中的 fragment 会扰乱后退按钮的行为。

老实说,我不能 100% 确定为什么会发生这种情况。但是,进行更改后,一旦调用后退按钮,就会在目标 fragment 上调用 ​​onResume() 方法。

关于安卓 fragment : Lifecycle method *always* called when fragment is displayed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543835/

有关安卓 fragment : Lifecycle method *always* called when fragment is displayed?的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  3. ruby-on-rails - Rails 4.0 expire_fragment/缓存过期不起作用 - 2

    我一直在尝试使用Rails的缓存功能,但我无法使某些缓存片段过期,尽管它们似乎已过期。使用Rails教程站点中指出的“俄罗斯娃娃缓存”,我正在使用此配置我在release_controller.rbController中使外部缓存过期,我在其中使用expire_fragment("all_available_releases")使片段过期。我在更新、删除或添加条目的Controller的每个方法中都使用它。这是WEBrick的日志,尽管过期片段已在其中注册,但5行后过期片段被读取并使用,而这是不应该的。这个例子是在destroy调用之后。ProcessingbyReleasesCont

  4. ruby-on-rails - 如何从 Rails Observer/Model 调用 expire_fragment? - 2

    我几乎什么都试过了,但似乎无法使用来自模型的expire_fragment?我知道你不应该这样做非MVC,但肯定有很多方法可以做到。我在lib/cache_helper.rb中用我所有的过期助手创建了一个模块,在每个中只是一堆expire_fragment调用。我有我所有的/app/sweepers下的缓存清扫器设置,并有一个“includeCacheHelper”在我的应用程序Controller中,因此在通过Controller调用时应用程序工作正常。然后事情是我有一些外部守护进程,尤其是一些循环的cron任务调用一个调用特定任务的rake任务方法。此方法进行一些处理并将条目输入到

  5. javascript - 在 jQuery 中发送给 .always 的参数是什么? - 2

    我找不到关于always()参数的文档方法。现在,我正在使用:$.post("foo.do",{...},function(data){...}).fail(function(jqXHR,textStatus,errorThrown){...}).always(function(){...}); 最佳答案 文档在jqXHRsectionofthe$.ajaxentry中.1参数如下:jqXHR.always(function(data|jqXHR,textStatus,jqXHR|errorThrown){});如果发生错误:jqX

  6. javascript - Angular .js : directive object in scope is always undefined - 2

    编辑:fork了@EliteOctagon的plunker,奇怪的是它在工作!无法理解为什么下面的代码不是。http://plnkr.co/edit/y8uvulA9RHQ1Y9mwzin1EDIT2:fork了之前的plunker并向Controller的逻辑添加了$timeout,它停止工作了!猜猜这真的是加载顺序。查看:http://plnkr.co/edit/ivmGQmEHTatNzBWhppyf我是Angular的新手,无法理解指令隔离范围。我需要创建一个指令来打印出在我的页面中,包含关于ViewController中的对象的信息。我试图做的是隔离指令范围并通过具有双向绑定

  7. javascript - Three.js: Resize rendering canvas (GPU hungry fragment shader) - 2

    我正在使用three.js运行资源匮乏的片段着色器。我已将渲染大小设置为800*600,以保持着色器即使在低端卡上也能流畅运行。我正在这样设置我的渲染Canvas:varcanvas1=document.getElementById('canvas1');renderer=newTHREE.WebGLRenderer(canvas1);renderer.setSize(800,600);renderer.autoClear=false;document.body.appendChild(renderer.domElement);在body元素上我有然后我在cssheader中做widt

  8. 微信小程序安卓视频播放卡顿问题 - 2

    在微信小程序开发中遇到在video组件的两个问题1.安卓手机里播放视频会有明显的卡顿问题刚开始以为是网络问题,或者是视频文件问题。排查了一下发现都没问题最后加了个属性就OK了uniapp和原生小程序方法:custom-cache="false"custom-cache={{false}}video组件兼容iOS手机custom-cache加了这个属性会让2.iOS手机第一次播放视频会有几秒黑屏问题因此我加了当前手机型号的判断uni.getDeviceInfo().deviceType获取当前设备api当为iPhone时不加custom-cache属性,否则加上custom-cache=“fal

  9. 安卓渐变的背景框实现 - 2

    安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景万恶的设计小姐姐又来搞事情啦,你说好好的设计一个纯色的背景框框不好嘛,非要把一个框框弄成渐变的,如果不拿出放大镜估计没几个人能看出来它是渐变的。来,我让你看看是啥样框子是从左到右渐变的,设计应该是做了一个底图,然后上面盖了一个白色圆角矩形。那么我们该怎么去实现它呢?实现方法下面介绍三种实现它的方法。先贴上源码地址,大家记得给个starhttps://git

  10. javascript - AngularJS : angular-ui-router always redirects to $urlRouterProvider. 否则位置 - 2

    我正在尝试创建一个SPA,您必须在其中登录才能访问几乎所有内容。所以很自然地,您看到的默认屏幕是登录屏幕。但是,在用户登录后,无论ui-sref是什么,ui-router都会重定向到登录页面(即使用户已通过身份验证)。这是我的用户界面路由器代码:(function(){'usestrict';angular.module('app',['ui.router','satellizer']).config(function($stateProvider,$urlRouterProvider,$authProvider,$httpProvider,$provide){$httpProvide

随机推荐