zoukankan      html  css  js  c++  java
  • Android-操作栏之副标题

      我们的目标是在操作栏右侧加上一个选项菜单,点击它就可显示或者隐藏操作栏的副标题。

      由于操作栏是在API11级以后出现的,因此必须考虑兼容性问题。我们直接让低于API11的设备根本看不到选项菜单即可。建立res/menu-v11,将menu的xml放入其中,

    添加上该选项菜单Item。

       然后老步骤:1.setHasOptionsMenu(true)

             2.onCreateOptionsMenu()

             3.onOptionsItemSelected()

        

        看似完美解决了问题,实际上有一个严重的bug。那就是经典的设备旋转问题。如果已经显示副标题,旋转后该副标题会为空,该选项菜单的title也会变成原先创造视图时title的默认值。

        如何解决呢?有的人会想到保存fragment实例,让其在设备旋转期间处于被保留状态。这个想法很棒,但忽略了一点,无论是副标题还是选项菜单的显示问题都属于视图问题,而不管fragment实例是否会被保存,fragment视图在配置改变(如旋转设备时)一定会被销毁(而它为什么一定会被摧毁,请读者阅读http://www.cnblogs.com/JiMoRuXue/p/5045506.html)。

        无论之前有无副标题,视图重建时,都会没有。因此我们需要在fragment中添加一个flag用于存储副标题是否显示。在视图重建时根据该flag来判断是否需要显示副标题。

        

        

        最后总结一下,视图层显示的数据如果是在非创建视图方法中设置的,那么在设备旋转这类改变配置的行为后,由于视图的销毁重建,就算fragment实例一直保留,也枉然。

  • 相关阅读:
    Cocos2d-X中的ProgressTimer
    具体解释Android中AsyncTask的使用
    C++中使用Json的方法
    linux包之procps之pmap命令
    java实现第九届蓝桥杯最大乘积
    java实现第九届蓝桥杯最大乘积
    java实现第九届蓝桥杯三角形面积
    java实现第九届蓝桥杯三角形面积
    java实现第四届蓝桥杯阶乘位数
    java实现第四届蓝桥杯阶乘位数
  • 原文地址:https://www.cnblogs.com/JiMoRuXue/p/5053267.html
Copyright © 2011-2022 走看看