问题描写叙述:

在一个点击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显示问题的更多相关文章

  1. ruby -- 问题解决(四)编码错误导致无法显示(2)

    从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT或 incompatible character encodings ...

  2. 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法

    关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法 题设: 经常使用FusionCharts图表的朋友可能会遇到这个问题.就是在FusionCharts显示的时候有时候 ...

  3. AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题

    解决AngualrJS页面刷新导致异常显示问题 绪 俗话说,细节决定成败,编程亦是如此.编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方.今略举一例,与君共 ...

  4. 解决ScrollView中包含ListView,导致ListView显示不全

    ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...

  5. Android零基础入门第88节:Fragment显示和隐藏、绑定和解绑

    在上一期我们学习了FragmentManager和FragmentTransaction的作用,并用案例学习了Fragment的添加.移除和替换,本期一起来学习Fragment显示和隐藏.绑定和解绑. ...

  6. css: transform导致文字显示模糊

    css: transform导致文字显示模糊 有人认为模糊的原因是:"transform时div的宽度或者高度并不是偶数,偏移 50% 之后,像素点不是整数,和显示像素没有对上". ...

  7. zsh 自动补全导致命令显示重复

    关键字:autocomplete, zsh, backspace, securecrt, xterm, linux console 举个例子: 输入命令ls  然后按TAB补全试试,发现竟然是这样的 ...

  8. jsp页面在IE8下文本模式自动为“杂项(Quirks)”导致页面显示错位

    最近在修改网站的响应式的页面时,由于都是套样式页面,修改过程都是粘贴复制,导致了一些细节问题在IE8下暴露出来: 遇到的问题就是在在Chrome,火狐页面都正常,唯独在IE8下页面样式显示乱样了,但是 ...

  9. Activity被回收导致fragment的getActivity为null的解决办法

    这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠现象,让我十分不爽.研究了一天,终于明白其中的原理并加以解决.解决办法如下: 如果系统内存不 ...

随机推荐

  1. C# 获取当月有多少天

    int days = DateTime.DaysInMonth ( 2009, 9 ); int days = DateTime.DaysInMonth ( DateTime.Now.Year, Da ...

  2. A - Design Tutorial: Learn from Math(哥德巴赫猜想)

    Problem description One way to create a task is to learn from math. You can generate some random mat ...

  3. Redis学习笔记(二)-key相关命令

    Redis支持的各种数据类型包括string,list ,set ,sorted set 和hash . Redis本质上一个key-value db,所以我们首先来看看他的key.首先key也是字符 ...

  4. 【java并发】(1)深入理解volatile关键字

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  5. 大白话理解promise对象

    Promise  代表了未来某个将要发生的事件(通常是一个异步操作)  Promise 是异步编程的解决方案,能够简化多层回调嵌套,代表了未来某个将要发生的事件.Promise是一个构造函数,本身有a ...

  6. SecureCRT连接Ubuntu报The remote system refused the connection.解决方案

    使用SecureCRT连接到远程Ubuntu,连接失败报The remote system refused the connection. 进入Ubuntu系统,终端中敲入以下命令: ps -ef|g ...

  7. poj2376 Cleaning Shifts 区间贪心

    题目大意: (不说牛了) 给出n个区间,选出个数最少的区间来覆盖区间[1,t].n,t都是给出的. 题目中默认情况是[1,x],[x+1,t]也是可以的.也就是两个相邻的区间之间可以是小区间的右端与大 ...

  8. 如何在编辑器打开Java程序

    我们都知道运行JAVA文件,可以从软件控制台运行我们写好的java文件,也可以从windows窗口运行,我们最开始接触的是通过windows窗口来运行java文件,下面简单介绍一下如何如何在编辑器打开 ...

  9. C++多行文本读取

    使用的多行读取的代码如下: //读取文本浮点数到多个模式 序列 bool CPicToolsDlg::readTxt2SeqMulti( std::string TxtName, std::vecto ...

  10. Newtonsoft.Json 处理日期格式

    Newtonsoft.Json.Converters.IsoDateTimeConverter iso = new Newtonsoft.Json.Converters.IsoDateTimeConv ...