背景

功能是这样的,在发布内容页面,会限制用户每天发布内容条数,当用户发布了内容之后,就会限制用户不能再发布内容,如果删除了发布的内容,限制也将会解除。

我做这个的思路就是,在数据库搜索当天是否发布了内容,并返回发布内容的条数,如果超过了限定的值就给出提示,如果没有超过就进入写内容页面。

Bug产生的原因就是没有实时的获取到当天发布内容产生的条数,因为这个页面是通过Fragment来写的,所以我当时就去看了Fragement的生命周期函数,我用了其中的某几个函数,出现了两种情况,一是发布完内容,不进入发布页面,直接进入删掉刚才发布的内容,再回到发布页面,是可以实时同步的,二是发布完内容之后,进入发布页面,出现超过限定的提示,然后删除发布内容,再回到发布页面,还是会有超过限定的提示,解决的办法有两个,一是杀掉进程重新进入,刷新数据,二是通过打开其他Activity之后,再次返回到发布页面(比如你进入了详情这个Activity,再返回到发布页面你就能看到发布页面重新加载了)。

但是上面的两种方法对于用户体验实在是太差了,考虑到大众来说,其实绝大多数人都不会想到上述的方法去解决,在他们看来这就是一个bug,那作为一个开发者来说,我们时时刻刻都需要注意到用户的需求,那既然用户不能去解决,那我们就要避免问题的产生,

这下面是Fragment的生命周期具体在什么时候出现,我用过其中的几个,发现都不能同步更新数据,于是我就想,除了生命周期函数,其他的方法或者函数的,能不能解决同步更新这个问题,于是我从搜索fragment生命周期函数,变为当Fragment被隐藏时刷新页面,果然被我搜到了,通过 onHiddenChanged 这个方法来刷新状态。

1
2
3
4
5
6
7
8
9
10
11
/**
* 需要界面重新展示时调用这个方法
*/
@Override
public void onHiddenChanged(boolean hidden) {
// TODO Auto-generated method stub
super.onHiddenChanged(hidden);
if (!hidden) {
firstRefresh();
}
}

onAttach(): 完成Fragment和Activity的绑定,参数中的Activity即为要绑定的Activity,可以进行赋值等操作。
onCreate() : 完成Fragment的初始化
onCreateView() : 加载Fragment布局,绑定布局文件
onActivityCreated() : 表名与Fragment绑定的Activity已经执行完成了onCreate,可以与Activity进行交互操作。
onStart() : Fragment变为可见状态
onResume() : Fragment变为可交互状态
onPause(): Fragment变为不可交互状态(不代表不可见)
onSaveInstanceState():保存当前Fragment的状态。记录一些数据,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。
onStop(): Fragment变为不可见状态
onDestroyView() : 销毁Fragment的有关视图,但并未和Activity解绑,可以通过onCreateView()重新创建视图。Fragment销毁时或者ViewPager+Fragment情况下会调用
onDestroy() : 销毁Fragment时调用。
onDetach() : 解除和Activity的绑定。Fragmen销毁最后一步