过时的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页面有重叠现象,让我十分不爽.研究了一天,终于明白其中的原理并加以解决.解决办法如下: 如果系统内存不 ...
随机推荐
- c语言实现迪杰斯特拉算法(邻接表)
储存结构,结构体的定义:(权值w用于表示两点间路径的花费) typedef int Status; typedef struct ENode//图的邻接表定义 { int adjVex;//任意顶点u ...
- mybatis一对多关系的关联查询
问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...
- angular的directive指令的link方法
比如 指令标签 <mylink myLoad="try()"></mylink> link:function(scope,element,attr){ el ...
- 在窗体中把DataGridView中的数据导出Excel
//DataGridView导出Excel private void bt_Excl_Click(object sender, EventArgs e) { SaveFileDialog saveFi ...
- ThinkPHP5中的助手函数
load_trait:快速导入Traits,PHP5.5以上无需调用 /** * 快速导入Traits PHP5.5以上无需调用 * @param string $class trait库 * ...
- 【MFC】在MFC中PreTranslateMessage()的使用方法
BOOL CSearchuserDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message==WM_KEYDOWN) // 判断是否有按键按下 ...
- 三星的Knox Warranty Bit原理
它是如何触发的? 这个值的状态是烧录在主板上,无法刷写修改, 从0到1 不可逆,除非替换硬件 If a non-Knox boot loader or kernel has been installe ...
- ROS:ubuntuKylin17.04-Ros使用OrbSLAM2
忙于图像处理和DCNN,很长时间不使用ROS,重新安装系统后,再次使用ORB-SLAM2(ROS)进行三维重建和实时追踪的演示. 参考以前的文章:ROS:ubuntu-Ros使用OrbSLAM ORB ...
- url 传参数时出现中文乱码
1.前端通过 url 传递参数,但是参数又有中文,在下一个页面接受参数的时候中文会乱码 解决方案为: 定义和用法 decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解 ...
- Tomcat 服务器中jsp页面乱码
<Connector port="80" protocol="HTTP/1.1" connectionTimeout=&quo ...