一般的な質問フラグメントをシングルトンとして定義できますか?
特定の質問私のアプリケーションでは、FragmentPager
とFragmentA
の2つのフラグメントを持つFragmentB
を持つ 'FragmentActivity'が1つあります。
FragmentA
extends Fragment
クラスでフラグメントをシングルトンとして定義しました。
private static instance = null;
public static FragmentA getInstance() {
if (instance == null) {
instance = new FragmentA();
}
return instance;
}
private FragmentA() {}
と私のFragmentPagerAdapter
で:
@Override
public Fragment getItem(int position) {
switch(position){
Fragment fragment = null;
case 0:
fragment = FragmentA.getInstance();
break;
case 1:
fragment = FragmentB.getInstance();
break;
}
return fragment;
}
これは私がフラグメントのレイアウトを膨らませる方法です:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
fragmentView = (RelativeLayout) inflater.inflate(R.layout.fragment_a_layout, container, false);
return fragmentView;
}
私の問題:
私が最初にアプリを起動したとき、すべてがうまく機能しています。アプリを閉じてから再起動すると、両方のフラグメントが表示されません。
フラグメントは、アプリケーションの再利用可能なコンポーネントであることを意図しています。それらをシングルトンとして使用するのではなく、代わりに Fragment.SavedState またはonSavedInstanceStateを実装する必要があります。
public class YourFragment extends Fragment {
// Blah blah blah you have a lot of other code in this fragment
// but here is how to save state
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// savedInstanceState will have whatever you left in the outState bundle above
}
}