1

我有一個工作模型的片段,當我調試代碼時,我看到片段onCreate被調用4次。片段:onCreate被調用4次

下面是我的代碼: MyFragmentActivity

class MyFragmentActivity extends FragmentActivity{ 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt()) 
      .replace(detailFragmentID, new MyDetailFragment()).commit(); 
     } 
} 

@Override 
    protected void onRestart() { 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss(); 
} 

} 

MyDetailFragment.class

class MyDetailFragment extends Fragment{ 

// has method like oncreate(),onCreateView(),onSaveInstanceState() 
} 

如何我MyDetailFragment的OnCreate中被稱爲?當我去一些其他活動,然後回來,然後傾斜設備只有oncreate和MyDetailFragment onSaveInstanceState被稱爲多次。

我如何解決這個問題,我已經看過幾篇文章,但它說我們需要使用HIDE,Show方法和其他東西?但是對此有什麼適當的注意?

編輯

當我來了距上一次活動回來,我在MyDetailFragment數據需要被刷新。

+0

好像烏爾創造同類片段中的多個實例。你能告訴我如何在活動中添加片段 –

+0

@PulkitSethi對不起,我沒有得到你? – Goofy

+0

在你的活動課你如何添加這些片段,你可以分享你的活動代碼 –

回答

0
i think ur recreating fragments multiple times, u do new MyListFragment everytime on onCreate function, call findFragmentByTag to get the existing fragment and set that, if null (first time) then create one 

/這裏是一些代碼的隊友,如果這does not工作和UR應用具有單一片段最好還是創建XML和只有一個片段標籤在裏面,並設置的setContentView功能XML */

// declare following member variable 
    MyFragment _fragment; 

    // in onCreate function, call this method 

    private void setupFragment() 
    { 
     _fragment = (MyFragment)getFragmentManager().findFragmentByTag("MyFragment"); 
     if(null == _fragment) 
     { 
    _fragment = new MyFragment(); 
    } 
    // now do the fragment transaction 
FragmentTransaction trans = getFragmentManager().beginTransaction(); 
trans.add(containerId, _fragment, "MyFragment"); // here tag is important 
trans.commit(); 
    } 
+0

謝謝,是的,你可能是正確的,你可以告訴我如何去做,當我從之前的活動回到此活動時,我想要在碎片中刷新數據?如何做到這一點 – Goofy

+0

@Goofy是否配合工作? –

0

試試這個

MyDetailFragment fragment = new MyDetailFragment(); 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     if (savedInstanceState == null) { 

     getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt()) 
      .replace(detailFragmentID, fragment).commit(); 
     } 
} 

@Override 
    protected void onRestart() { 
     if(fragment != null) { 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, fragment).commitAllowingStateLoss(); 
     } 
} 
+0

但我的MyDetailFragment中的數據是否會刷新? – Goofy

+0

我試過它仍然被稱爲4次 – Goofy

相關問題