横竖屏切换时,禁止activity重新创建,导致getActivity为null

Android Kotlin弹窗开发:从AlertDialog到生产级DialogFragment AlertDialog是Android中最基础的轻量级UI控制器,其本质是依赖Context、受FragmentManager管理、响应配置变更的生命周期敏感组件。在Kotlin环境下,它与空安全、协程作用域、作用域函数深度耦合,稍有不慎即引发BadTokenException、内存泄漏或无障碍审核失败。本文围绕DialogFragment这一官方推荐方案,系统解析生命周期绑定、协程取消机制、Material主题适配及无障碍支持四大核心原理,覆盖ConfirmDialog、LoginDialog、Loadi 阅读详情

遇到的问题如下:

出现问题代码如下:

private AlertDialog.Builder glxssConnectionDialog(){
    if(getActivity()==null){
        return null;
    }
    final AlertDialog.Builder normalDialog = new AlertDialog.Builder(getActivity());
    normalDialog.setTitle(R.string.dialog_connection_title);
    normalDialog.setMessage(R.string.dialog_connection_message);
    normalDialog.setNeutralButton(R.string.dialog_connection_positiveButton,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    CameraFragment.this.getActivity().finish();
                }
            });
    normalDialog.setCancelable(false);
    normalDialog.create();
    return normalDialog;
}

代码问题如下:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:225)
at android.app.AlertDialog$Builder.<init>(AlertDialog.java:459)
at com.llvision.app.CameraFragment.f(CameraFragment.java:1250)
at com.llvision.app.CameraFragment.x(CameraFragment.java:66)
at com.llvision.app.CameraFragment$10.handleMessage(CameraFragment.java:281)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6595)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

创建dialog时,获取到的getActivity为null,造成出现上述问题。

解决办法:

需要在manifest中<activity>标签中加入android:configChanges="keyboardHidden|orientation|screenSize"属性。

此属性的作用是横竖屏切换时,禁止activity重新创建,防止getActivity为null。创建dialog时,对getActivity做判null处理。

加入android:configChanges="keyboardHidden|orientation"属性,在低版本上,这个是可以起作用。在android 4.0 以上实际上这个是不起作用的。

必须要加上screenSize。

android:configChanges="keyboardHidden|orientation|screenSize"

EEGLAB+ERPLAB实战:从.cnt文件到情绪ERP差异波,一份避坑指南 本文详细介绍了使用EEGLAB和ERPLAB处理Neuroscan的.cnt格式脑电数据的全流程,从数据导入、预处理到情绪ERP差异波生成。重点解决了采样率验证、事件标记检查、重参考选择、滤波策略与ICA组合等实操难题,并提供了情绪图片ERP研究中P1、EPN和LPP成分的分析技巧,帮助研究者避免常见错误,提升数据处理效率。 阅读详情

相关推荐

microduck复刻实战:强化学习机器人从仿真训练到真机部署全攻略

强化学习是智能体通过与环境交互试错来学习最优策略的机器学习范式,在机器人控制领域,常借助物理仿真环境进行策略训练,以降低真实世界的试错成本。其核心原理是通过奖励信号引导策略网络迭代优化,PPO等算法则在稳定性和样本效率之间取得平衡。仿真训练的价值在于可批量验证控制策略,但仿真与真实硬件之间存在物理参数偏差,需通过域随机化等技术实现迁移。从四足机器人到仿生机器人,这类方案广泛应用于复杂运动控制任务。microduck作为一个典型的强化学习机器人项目,其复刻过程涉及环境搭建、奖励设计、PPO调参及Sim-to-

weixin_29061425的博客 357

关于DialogFragment 的 getActivity() 方法为空值的问题

最近在浏览项目里 Umeng 统计的崩溃日志时,发现一个空指针异常: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentActivity.getSupportFragmentManager()' on a null object reference at com.yhm...

w1371598840的博客 736

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

使用DialogFragment的一些感受及防踩坑经验(getActivity、getDialog为空,cancelable无效等)

前言 安卓里面创建对话框的方式其实蛮多的。Dialog、AlertDialog、DialogFragment、PopupWindow甚至Activity设置主题为Dialog也能创建对话框。

cjs1534717040的专栏 3417

读书笔记|智能运维系统落地方案

对于互联网公司来说,系统复杂化导致的人工运维成本激增已经是普遍现象,采用智能运维是行之有效的应对策略。智能运维的核心思想是利用算法来处理海量运维数据,积累运维经验,从而代替人工思考判断,以自动化的过程实现风险的预防、发现、定位和处理。而智能运维系统是其中的重中之重,但建设企业应用智能运维系统,不是应用运维部独立规划设计就可以完成的,它需要业务、产品、开发、基础设施运维多部门协同才能顺利实施。 那么,作为运维人员,您是否了解智能运维系统的架构?如果参与规划建设智能运维系统,该怎么着手呢?下面我们立足实际需求

xiaoshuaca的博客 681

LTspice基础教程-028.Timestep too small

Q: “Timestep too small” error message A: If the LTspice program can’t find a solution for the guessed time step, then the program decreases the time step and tries again. This can’t work forever. If...

gaoyong_wang的博客 2万+

Android中getActivity()为null的解决办法

前言 在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是依附在Activity容器的一个试图,如果需要拿到当前的Activity的上下文Context就必须通过getActivity()获取。 然而,不知道各位程序猿有没有遇过出现getActivity()出

踏雪寻梅的博客 2387

UE5入门第二周总结:基于蓝图的国际象棋的实现

在C++的学习中,这是一个入门级别的项目。我们的目标是灵活运用蓝图的特性和强大的可视化功能,做出这一入门级项目的同时,思考如何优化并改进算法,并尽可能的用面向对象的方法实现,用蓝图中的继承和多态简化编码过程。

YoungeYang的博客 1259

Fragment获取Activity为null的问题

最近发现Fragment获取Activity为null的解决办法。 解决办法转载自https://www.jianshu.com/p/c94ae135db94,内容如下: 标题: 在Fragment中运行PopupWindow提示 Unable to add window -- token null is not valid; is your activity running? 文章内容: 1、碰到的问题 在Fragment的生命周期onActivityCreated里弹出PopupWind

yidan923的专栏 949

200SMART PLC时间不准?手把手教你用MCGS触摸屏实现自动校时(附完整代码)

本文针对西门子200SMART PLC时钟不准的常见问题,提供了一套基于MCGS触摸屏的自动校时解决方案。文章详细阐述了时钟偏差的根源、时间同步方案的技术选型,并手把手指导如何配置MCGS与PLC的通信,以及编写完整的PLC时间读取、转换与设置代码,最终实现稳定可靠的自动时间同步功能。

jupyter5notebook的博客 452

Sublime Text4代码配色自定义方案

关于Sublime Text对于我的使用体验,只能说内置的代码主题真的都太low了,一点都不好看。所以接下来我分享一下我自定义代码配色。当然,大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不多说,直接上代码直接将代码复制粘贴到:Preferences > Customize Color Scheme 即可。},"globals":"foreground": "var(white)", // 前景色。

追求细节,成就完美 6026

语言切换适配

前言 拿来主义而已, 也很感谢创作者的分享精神,开源有益,共同进步才能走得更远, 旧版 旧版本仅适配API28以下版本 高版本环境 AS会提示 Deprecated /* * 过时 App中维护 * 注释: * @author maqi * created at 2021/12/15 11:39 * */ @Deprecated("") private fun switchLanguage() { val language = xxx

Android小码家 1086

Python爬虫实战:抓取全球船舶AIS定位数据的全流程指南

AIS(Automatic Identification System)自动识别系统是目前全球航运中用于实时跟踪船只位置的主要技术。名称、MMSI编号、呼号实时经纬度船速、航向吃水、目的港状态(航行/停泊/锚泊)航线信息等🛰️海上运输监控:追踪航线,预估到港时间;🛳️船舶管理系统:为物流、港口运营提供决策依据;🌊研究分析:如海洋运输碳排放研究、船只拥堵热力图等;🧠人工智能训练数据集:用于轨迹预测、碰撞预警模型。

2201_76125261的博客 1362

谈谈Android切换系统语言导致Activity的重启

一:网上能搜到的解决方法: 方法:在AndroidManifest.xml中Activity节点中配置android:configChanges="locale|layoutDirection"  1.添加后Activity是不重启了,但是会导致中、英文同时显示的问题 2.如果不添加,app运行时,切换系统语言会导致当前的Activity被销毁并重新创建,即先调用onDestroy()紧接着...

sunming的博客 8439

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android切换语言程序闪退及无效果

Android切换语言程序闪退,和应用内刷新切换语言

介亭的博客 4196

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Fragment 中使用 getActivity()为null的原因---剖析源码

问题: 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒 思考 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的 多数的回答就是:大多数情况下的原因:你在调用了getActivity()时...

weixin_30814223的博客 1829

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

防止Activity被重新创建

Activity在系统配置发生改变之后会重新创建,我们常见的是在手机旋转屏幕时activity就被重新创建了。那么怎么样才能不被创建呢?我们先来看一下系统的那些内容被改变后Activity会被重新创建。 系统的配置在Configuration类中,我们来查看Configuration类中的成员,看看他们分别代表的意思。 mcc: SIM卡唯一标示IMSI(国际移动用户识别码)中的国家代码,由三位数

BlueBerry的专栏 6480

关于转屏后fragment取getActivity为null问题

只在Fragment的onActivityCreate()中调用getActivity,赋给全局变量使用,转屏后onActivityCreate()会被重新调用,重新赋值

sunj2007的专栏 353

Android屏幕旋转导致Activity重建的几种解决办法

最近学习了Android开发的相关课程,也试着动手做了书上的例子和自己的项目,在《Android编程权威指南》的第三章介绍了Activity的生命周期,提到了旋转设备会导致Activity重建的问题以及对应的解决办法。 教材中提到的解决方法是分别创建水平和垂直布局,再通过覆盖onSaveInstanceState(Bundle)方法保存数据,在屏幕旋转后将数据传递给新的Activ...

小咸鱼的博客 4653

横竖屏切换时,禁止activity重新创建,android:configChanges="keyboardHidden|orientation" 不起作用

AndroidManifest.xml android:configChanges="keyboardHidden|orientation" 但是,实际上很多手机上,这个根本不起作用。这是为什么呢?

mybook1122的专栏 1万+

Android屏幕横竖屏旋转时,禁止Activity重启,不重新走生命周期

默认情况下,Android设备屏幕方向改变时,会重启正在运行的Activity,会依次走onDestroy()、onCreate(). 如果此时界面运行的是播放音频或者是播放视频,那么旋转后音频或视频状态都会被销毁并重置。 还好Android已经想到了这种情况,为我们提供了解决方案。 在AndroidManifest清单文件中,在需要的Activity中加入android:configCha...

adojayfan的博客 3941

解决Android里getActivity()为空的问题

在开发项目中有时会碰到getActivity函数为空的情况,    导致apk空指针崩溃问题,  看代码逻辑没有明显的原因。        如果看Activity.java、FragmentActivity.java的源码就可以找到原因。 当activity实例在后台时, 系统在回收资源时很可能回收掉Activity,  并在onSaveInstanceState函数里保存fragment的状态

brycegao321的博客 1万+

ButterKnife在横竖屏切换空指针异常的处理

@BindView(R.id.video_controller_play) @Nullable ImageView mImageView;在绑定的时候添加@Nullable。 注意只能在@BindView()后边,写在前面无效

sinat_35541927的博客 852

android manifest中activity android:configChanges 横竖屏切换,禁止重建Activity

android:configChanges Android:configChanges=[mcc,mnc,locale,touchscreen,keyboard,keyboardHidden,navigation,screenLayout,fontScale,uiMode, orientation,screenSize,smallestScreenSize]  程序在

legend12300的专栏 3567
上一篇: Handler延迟消息处理
下一篇: Git把Tag推送到远程仓库
闲暇部落
博客等级 码龄12年 2775粉丝 215原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲暇部落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值