2017-04-23 53 views
1

我有一個ViewPager其中包含Fragment s。 ViewPager有一個適配器FragmentStatePagerAdapterViewPager - FragmentStatePagerAdapter和處理旋轉

適配器的getItem方法。

@Override 
public Fragment getItem(int position) { 
    String text= dbHelper.getText(position); 
    CustomFragment frg = new CustomFragment(text); 
    return frg; 
} 

我正在初始化適配器的getItem方法中的片段。

一切正常。

但是,如果方向發生變化,而不是恢復我的初始化片段,則使用默認構造函數CustomFragment創建CustomFragment。所以這會創建帶有虛擬數據的片段。

這是什麼原因? 我如何恢復以前創建的片段?

回答

1

初始化您Fragment S中的理想的方式是創建一個類似工廠方法:

public static CustomFragment newInstance(String text) { 
    Bundle arguments = new Bundle(); 
    arguments.put("someText", text); 

    CustomFragment fragment = new CustomFragment(); 
    fragment.setArguments(arguments); 

    return fragment; 
} 

,並得到與的參數在onCreate()方法和過程,它初始化無論你在想片段。

通過這種方式,當在配置更改時重新創建碎片時,參數將被保留,並且Fragment會在調用onCreate()方法時自行處理。

如果您使用的是最新工具,您可能已經注意到關於相同的lint警告。

+0

@ salih-erikci你試試看嗎? –

+1

是的,我用你的方法,它的工作。正如你所說,這必須是初始化碎片的理想和推薦的方式。謝謝 –