效果如圖:
[img]http://dl2.iteye.com/upload/attachment/0094/0124/5d8ed018-8cdd-3087-a349-345f22561372.jpg[/img]
先介紹下場景:
第一個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();
}
然後運作。結果實作了。。
隻能說自己運氣還不錯,如果這個問題解決不了,就會大改代碼。
本來代碼就很爛,再改改就不能見人了。- -
[color=red][b]聲明[/b][/color]
歡迎轉載,但請保留文章原始出處
[Iteye]-[url]http://jnwsczh.iteye.com/blog/2019456[/url]