Fragment显示问题
来源:互联网 发布:现金赌博软件手机软件 编辑:程序博客网 时间:2024/06/14 17:36
Fragment显示问题,界面缓存及设置默认值问题
最近遇到了一个关于Fragment的显示问题。我的需求是这样的,在一个Activity中我有两个按钮A和B分别控制FragmentA和FragmentB的显示,
FragmentB中有一个EditText,当我显示FragmentB时会传一个值给EditText用于默认显示。
我现在的要求是:
1.使用replace替换FragmentB时,editext必须显示我给的默认值。
2.当我显示FragmentB时,点击home键,再打开应用时必须保留EditText修改后的值。
乍一看,这两个需求很简单,首先在FragmentB中设置一个变量用于接收Activity传过来的默认值,
但是这样一来就无法实现上述的第二点,因为点击home键再重启应用时,会调用Fragment的onResume方法又会给editText设置默认值,而这种情况的时候我们是想保留editText的修改值的。
这时候想到的第一个就是避开onStart,onResume,因为在Fragment重新获得焦点的时候会调用这两个方法,然后就理所当然的直接将赋值写在onCreateView中
运行之后会发现除了第一次显示Fragment正常后,第二次,第三次就出现了问题,
当我修改EditText然后再切换Fragment时,发现FragmentB保留了上次修改的结果,也就是说onCreateView中的setText()没有起到作用。
当我修改EditText然后再切换Fragment时,发现FragmentB保留了上次修改的结果,也就是说onCreateView中的setText()没有起到作用。
一开始我以为是不能在onCreateView里面进行赋值,后来将EditText的赋值语句移到onViewCreate 和 onActivityCreated中也还是不行,但是在onStart和onResume中就可以,这下尴尬了,上述的两种效果竟然无法同时达到,这也让我意识到Fragment对View的绘制比Activity要来的复杂。
这里有一个非常简单粗暴的方法就是每次显示FragmentB的时候都新建一个FragmentB,这样把EditText的赋值直接写在onCreateView中就能起到效果,当然作为一个有追求的程序猿是不会用这种没有技术含量的方法。
之后我想到的是能不能在Fragment消失时保存EditText的修改值,然后Fragment重新获取焦点的时候再给它赋值,这里我想到的是Activity的onSaveInstanceState和onRestoreInstanceState方法,Fragment中没有onRestoreInstanceState方法,相对应的它可以从onActivityCreated方法中获取保存的数据。但是问题来了,Fragment按home键又重新启动的时候是不会调用onActivityCreated方法的。
后来我突然灵光一闪,想到Fragment不是本身就有一个Bundle吗,即Fragmen的setArguments和getArguments方法,这样一来就有办法了,我在设置默认值和调用onPause方法时将默认值和EditText的修改值,利用setArguments方法存入Bundle中,在onResume方法中调用getArgument方法获取EditText最终显示的值。这样就完美实现了上述的两个要求。
虽然只是很简单的两个需求,但是实现起来没想到有这么多问题,这里我还是没有弄清楚Fragment是如何绘制界面的,我认为应该是Fragment缓存了界面修改,然后再onStart或onStart之前的生命周期方法中调用之前的缓存去绘制界面导致在onStart方法前比如onCreateView方法中无法修改界面的显示,不过具体是怎么实现的我还没有搞清楚,必须要深入源码中才能知道到底是如何缓存的。
- Fragment显示问题
- viewpager+fragment出现fragment不显示问题
- Fragment UI显示重叠问题
- 关于 Fragment内嵌套Fragment 切换显示不正确的问题。
- fragment嵌套fragment不显示问题(viewpager)
- Fragment中嵌套Fragment跳转回来不显示的问题
- ViewPager + Fragment 多个fragment后几页显示不正常问题
- Fragment嵌套导致内容不显示问题
- 过时的PreferenceActivity导致Fragment显示问题
- ViewPager+Fragment+NumberPicker显示的问题
- Fragment的显示与隐藏问题
- ViewPager中嵌套Fragment不显示问题
- React Native中显示fragment的问题
- fragment嵌套fragment,切换后,子fragment内容不显示的问题
- 解决fragment多层嵌套来回切换不显示的问题
- 关于ViewPager中显示fragment的生命周期调用问题
- fragment嵌套viewpager嵌套 关于不能正常显示问题
- 关于ViewPager嵌套Fragment,第二次加载数据不显示问题
- 转 设计模式
- 【百度AI人脸核身+公安验证】IOS示例工程运行
- ios 应用打开 图片 文档
- 剑30-最小的K个数
- es6 javascript中的class理解
- Fragment显示问题
- Xshell实现Windows上传文件到Linux主机
- C++异常处理
- 放球问题
- 替换空格问题
- 二分搜索
- 更改MYSQL的ROOT用户的密码
- java中常用的日志框架-logback和log4j
- python2和python3 在windows7环境下安装