web-dev-qa-db-ja.com

Androidのシングルトンとしてのフラグメント

一般的な質問フラグメントをシングルトンとして定義できますか?

特定の質問私のアプリケーションでは、FragmentPagerFragmentAの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;
}

私の問題:

私が最初にアプリを起動したとき、すべてがうまく機能しています。アプリを閉じてから再起動すると、両方のフラグメントが表示されません。

22
Daniel L.

フラグメントは、アプリケーションの再利用可能なコンポーネントであることを意図しています。それらをシングルトンとして使用するのではなく、代わりに 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
    }
}
27
hwrdprkns