zoukankan      html  css  js  c++  java
  • 过时的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. 常常陷入细节中,应该从更高的层次理解代码。抽象、分层、模块化、规整化。





  • 相关阅读:
    C语言实现两栈空间共享
    MyEclipse里项目部署到tomcat上之后,tomcat webpps文件夹里为什么找不到这个项目
    CSS选择器
    用友2016成都校园招聘笔试题
    windows、ubuntu下eclipse搭建java、Python环境问题总结
    ubuntu上用eclipse搭建java、python开发环境
    windows 下用eclipse搭建java、python开发环境
    简单事件机制的研究
    软件测试(软件安装:php+mysql+apache+mantis过程遇到的问题以及解决方法)
    4、总结一下,以软件开发生命周期来说明测试的使用情况。
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6918027.html
Copyright © 2011-2022 走看看