1. 程式人生 > >在同一個Activity下實現切換Fragment時重新整理fragment介面

在同一個Activity下實現切換Fragment時重新整理fragment介面

在做專案時遇到一個問題,我在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同步重新整理;