天天看點

解決Fragment 使用回退棧,傳回上一Fragment不重新整理問題!

效果如圖:

[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]