效果如图:
先介绍下场景:
第一个Fragment为A
第二个Fragment为B
A在onCreateView的时候会自动去数据库读取数据。更新View。
然后
点击A的【修改】,可以在B里对A的三个数据进行修改,修改完毕后,保存到本地数据库里。
点击【确认】返回A。
然而这时候A的值没有变化,跟踪代码看,A在onCreateView的时候读取数据库了,而且数据库的值也是改动后的。值也赋上了。但是A显示的时候还是修改前的值。。
----------------------------------------------
第一次用Fragmeng,所以对他不了解,没办法,只好问度娘。
搜索了很久都没有百度到解决方法,后来在群里询问了一些网友,都没有解决。
最后没办法自己一点一点的试,一点一点的研究呗。
先分析了一下
一、使用回退栈回到Fragment-A的时候,是不是只是显示没有做更新,或者显示的Fragment本来就是一个缓存,而不是最新的。(百度也说到这一点了,但是很多都没有了下文。。)
二、是不是Fragment生命周期哪里搞错了。
我先从回退栈入手,在Fragment-A跳转到B的时候,把A关闭,或者脱离Activity。
第一个猜想操作失败。。
后来就测试第二个猜想,在Fragment生命周期中做文章。(这个也是我一同事提醒的。)
我一般写Fragment 都是实现下面3个方法:
public class VipFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//....更新View
View view=inflater.inflate(R.layout.vip_fragment, null);
return view;
}
@Override
public void onPause() {
super.onPause();
}
根据Fragment生命周期发现:onResume()
所以在想,在这时候在修改View是不是就可以实现了。?
所以就做了如下修改:
public class VipFragment extends Fragment {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//把view设置为全局变量
view=inflater.inflate(R.layout.vip_fragment, null);
return view;
}
@Override
public void onResume() {
//...更新View
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
然后运行。结果实现了。。
只能说自己运气还不错,如果这个问题解决不了,就会大改代码。
本来代码就很烂,再改改就不能见人了。- -
声明
欢迎转载,但请保留文章原始出处
[Iteye]-
http://jnwsczh.iteye.com/blog/2019456