在同一個Activity下實現切換Fragment時重新整理fragment介面
阿新 • • 發佈:2018-12-17
在做專案時遇到一個問題,我在A fragment中展示從伺服器拿到的資料,在B fragment,新增資料到伺服器,同時B fragment同步重新整理,糾結了很久都不行,因為我建立fragment時用的是:show與hide
switch (index) { case 0: if (fragSendControu == null) { fragSendControu = new Frag_Send_Controu(); ft.add(R.id.send_frag, fragSendControu); } ft.show(fragSendControu); // ft.replace(R.id.send_frag, new Frag_Send_Controu()); break; case 1: if (fragSendAdd == null) { fragSendAdd = new Frag_Send_Add(); ft.add(R.id.send_frag, fragSendAdd); } ft.show(fragSendAdd); // ft.replace(R.id.send_frag, new Frag_Send_Add()); break; } ft.commit();
然而show,hide切換時只是把原來的介面隱藏了並沒有需要從新呼叫;獅子啊沒辦法了就使用了replace(它在每次呼叫時都是從新建立一個新的,你在多個fragment之間稍微點快速些她就崩了);
今天在做著時突然想到去看看fragment的生命週期在使用show,hide時他的生命週期是怎麼樣的。
突然發現我可以在隱藏Bfragment的時候呼叫Afragment的onResume,或onStart(),於是我就:
switch (index) { case 0://開啟A fragment if(B!=null){//如果B不為空,隱藏B fragment ft.hide(B); A.onResume();//呼叫A fragment的onResume } if (A== null) { A= new A(); ft.add(R.id.send_frag, A); } ft.show(A); // ft.replace(R.id.send_frag, new A()); break; case 1://開啟B fragment if(A!=null){ ft.hide(A);//如果A不為空,隱藏A fragment } if (B== null) { B= new B(); ft.add(R.id.send_frag, B); } ft.show(B); // ft.replace(R.id.send_frag, new B()); break; } ft.commit();
A fragment:
@Override
public void onResume() {
super.onResume();
//這兒放你想要執行的函式
Logutil.d(tag, "onResume");
}
這樣就實現了你在B fragment向伺服器新增完資料後,點選A fragment時,Afragment同步重新整理;