2014-02-15 56 views
1

我有一個活動託管一個帶有5個片段的ViewPager(使用FragmentPagerAdapter)。我必須確保我的碎片只在來自父Activity的數據可用時填充其視圖,並且該數據僅在來自父Activity的綁定Service調用onSeviceConnected方法後可用。ViewPager片段取決於來自父Activity活動的綁定服務的數據

所以,我把所有創建ViewPager,ActionBar選項卡,FragmentPagerAdapter,... onServiceConnected方法的代碼,當Activity首次啓動或當我銷燬並重新啓動時,一切正常。但是,當配置更改(當我旋轉屏幕)時,我調試我的程序,並看到活動調用onCreate後,當前選定的片段立即調用onCreateView,當然造成麻煩(因爲那時該服務不叫,我不沒有數據準備好這個片段參考!)。

我也嘗試使用事件偵聽器,並使碎片只填充視圖時,父活動通知(當數據可用),但由於使用PagerAdapter,我無法管理創建一個片段時查看,當然何時適合它來填充內容!

我想知道的是:當我們旋轉屏幕時,Activity會被銷燬並重新創建嗎?如果那是真的,爲什麼在這種情況下,活動不會像第一次創建時那樣做? 那麼,有人可以爲我提出這個問題的想法嗎?

回答

0

如果可以的話,通常你存儲在Bundle這些信息:

void createMyFragment(value) { 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("key", value); 

    Fragment fragment = new MyFragment(); 
    fragment.setArguments(bundle); 
} 

@Override  
public void onCreate(Bundle bundle) { 
    value = bundle.getParcelable("key"); 
} 

如果你不能做到這一點,你可以例如在你的情況將你的viewPager.setAdapter(pagerAdapter)呼叫onActivityCreated()而不是做它的在onCreateView()

@Override 
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ... 
    viewPager = (ViewPager) dialogView.findViewById(R.id.viewpager); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    viewPager.setAdapter(new MyPagerAdapter(getActivity())); 
} 
相關問題