在一个点击preferenceactivity中某项显示一个Fragment的场景中,出现错误:
java.lang.RuntimeException: This should be called after super.onCreate.
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();
这样启动Fragment之后会显示透明背景,也就是说父PreferenceActivity会显示出来,显然不行。设置目的Fragment的背景即可,在layout布局中设置背景为android:background="@android:color/background_light"
1. 出现问题没有第一时间写一个简单的demo确认问题所在。
2. 对于过期的api认识不足,以为可以通过源码找到绕过问题所在。在查看源码上面花了很多时间。
3. 不知道如何获取PreferenceActivity的根view的id,导致拉长了解决问题时间。
4. 经常陷入细节中,应该从更高的层次理解代码。抽象、分层、模块化、规整化。
过时的PreferenceActivity导致Fragment显示问题,布布扣,bubuko.com
过时的PreferenceActivity导致Fragment显示问题
原文:http://blog.csdn.net/murphykwu/article/details/38060191