过时的PreferenceActivity导致Fragment显示问题
问题描写叙述:
在一个点击preferenceactivity中某项显示一个Fragment的场景中,出现错误:
java.lang.RuntimeException: This should be called after super.onCreate.
百思不得其解。
由于报错的那一行是在super.onCreate之后的。代码非常easy应该也不会有错误。由于当时项目代码非常大。且签名成系统应用,所以不好调试。
最后自己写了个简单的demo来測试,发如今启动fragment中显示找不到须要启动的fragment。找不到之后会再次回到preferenceactivity这个界面,就会导致错误。启动Fragment的代码例如以下:
preferenceactivity.startPreferencePanel(PowerUsageDetail.class.getName(), args, R.string.details_title, null, null, 0);
或者
startWithFragment(DemoFragment.class.getName(), null, null, 0);
问题原因:
除了如上所看到的原因之外。android在level 11之后似乎就对preferenceactivity不支持了,推荐使用PreferenceFragment
可是本项目大部分代码都是写好了,不好改动。所以还是要考虑保持原样启动要求的Fragment。
所以原因是android对其不支持了。
解决方法:
在响应点击的地方使用例如以下代码。显示相关的Fragment:
FragmentManager fm = caller.getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
PowerUsageDetail pd = new PowerUsageDetail(); Intent i = new Intent();
i.putExtras(args);
pd.setArguments(args);
ft.add(android.R.id.content, pd);
ft.addToBackStack("wodebackstack");
ft.commit();
注意对于的ViewGroupId为android.R.id.content。在PreferenceActivity中通常是用loadFromResources来加载布局。没办法定义id。android.R.id.content表示的是视图的根id。
注意:
这样启动Fragment之后会显示透明背景。也就是说父PreferenceActivity会显示出来。显然不行。设置目的Fragment的背景就可以,在layout布局中设置背景为android:background="@android:color/background_light"
总结:
1. 出现故障没有第一时间写一个简单的demo确认问题所在。
2. 对于过期的api认识不足,以为能够通过源代码找到绕过问题所在。在查看源代码上面花了非常多时间。
3. 不知道怎样获取PreferenceActivity的根view的id。导致拉长了解决这个问题时间。
4. 常常陷入细节中,应该从更高的层次理解代码。抽象、分层、模块化、规整化。
过时的PreferenceActivity导致Fragment显示问题的更多相关文章
- ruby -- 问题解决(四)编码错误导致无法显示(2)
从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT或 incompatible character encodings ...
- 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法
关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法 题设: 经常使用FusionCharts图表的朋友可能会遇到这个问题.就是在FusionCharts显示的时候有时候 ...
- AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题
解决AngualrJS页面刷新导致异常显示问题 绪 俗话说,细节决定成败,编程亦是如此.编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方.今略举一例,与君共 ...
- 解决ScrollView中包含ListView,导致ListView显示不全
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- Android零基础入门第88节:Fragment显示和隐藏、绑定和解绑
在上一期我们学习了FragmentManager和FragmentTransaction的作用,并用案例学习了Fragment的添加.移除和替换,本期一起来学习Fragment显示和隐藏.绑定和解绑. ...
- css: transform导致文字显示模糊
css: transform导致文字显示模糊 有人认为模糊的原因是:"transform时div的宽度或者高度并不是偶数,偏移 50% 之后,像素点不是整数,和显示像素没有对上". ...
- zsh 自动补全导致命令显示重复
关键字:autocomplete, zsh, backspace, securecrt, xterm, linux console 举个例子: 输入命令ls 然后按TAB补全试试,发现竟然是这样的 ...
- jsp页面在IE8下文本模式自动为“杂项(Quirks)”导致页面显示错位
最近在修改网站的响应式的页面时,由于都是套样式页面,修改过程都是粘贴复制,导致了一些细节问题在IE8下暴露出来: 遇到的问题就是在在Chrome,火狐页面都正常,唯独在IE8下页面样式显示乱样了,但是 ...
- Activity被回收导致fragment的getActivity为null的解决办法
这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠现象,让我十分不爽.研究了一天,终于明白其中的原理并加以解决.解决办法如下: 如果系统内存不 ...
随机推荐
- POJ 1172 DFS
(感谢wzc学长的幻灯片) 单组数据 注意从必经点能到标记过的点则此点不是分裂点. //By: Sirius_Ren #include <cstdio> #include <queu ...
- A - Supermarket
Problem description We often go to supermarkets to buy some fruits or vegetables, and on the tag the ...
- easyui验证提示框 卡在屏幕上!!
场景:验证提示框,关闭diglog窗口后 还显示在页面中 解决方法: 在窗口关闭事件中,删除提示框(这貌似并不可行),只能将验证提示框隐藏起来. $('#dialog').dialog({ onClo ...
- ★Java语法(一)——————————标识符
1.定义:用来标识类名.变量名.方法名.数组名.文件名的有效字符序列: 2.命名规则:a 由字母.数字._(下划线)和$(美元符号)组成 b 数字不能作为第一个字符 c 不能是Java中的关键字和保留 ...
- Python3编写Windows服务程序
最近做了公司签到的小工具,有同事要求做成Windows服务,开机自启.先说下怎么用Python写Windows服务程序. #encoding=utf-8 import win32serviceutil ...
- 教材配套PPT初稿
1-10章初稿,基本完整.有些粗糙,后面可能会稍作调整. 附更新情况如下: 1.增加了第10章内容: 2.第5章增加了一些内容: 3.第3章内容部分更新: 4.增加了第8-9章内容. 订正:更新了第8 ...
- 创建一个类Person
创建一个类Person,包含以下属性:姓名(name).年龄(age).朋友(friends数组).问候(sayhi方法,输出问候语,例如:"你好!").交朋友(addFriend ...
- Maven服务器的使用之Maven桌面项目和Maven Web项目的创建
Maven的使用 Maven功能强大, 可以参与管理软件的整个生命周期. Java软件开发中的jar包管理更是Maven的绝技. 1.创建Maven桌面项目 1.1 选择菜单创建Maven项目 1.2 ...
- 微服务常见安全认证方案Session token cookie跨域
HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述.HTTP 基本认证的过程如下: ...
- idea中git回滚到指定分支
1.git - > show history,选中回滚的指定版本,右击copy revision number 粘出版本号 2.git -> reset hard 出险新页面之后,选中ha ...