0

私はそれにロードMainActivityするを持っています。content_containerFragments

そのうちの 1 つで、ロードFragmentすることもできます。sub_containerFragments

私はMainActivityのスタックで戻るボタンを管理しますFragment

public Fragment addFragmentToStack(Fragment fragment){
    if(fragmentStack.size()>MAX_NUM_FRAGMENTS){
        fragmentStack.remove(0);
    }
    return fragmentStack.push(fragment);
}   

@Override
public void onBackPressed() {
    if (fragmentStack.size() > 0) {
        fragmentStack.pop();
        if (MyApplication.fragmentStack.size() > 0) {               
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_container, fragmentStack.peek());
            ft.commit();
        }
    }
}

Fragmentそして、content_container私が使用するa を置き換えたいときはいつでも

Fragment someFragment = new SomeFragment(); 
fragmentTransaction.replace(R.id.content_container, ((MainActivity)getActivity()).addFragmentToStack(someFragment), "");
fragmentTransaction.commit();

1 つはギャラリーで、 aまたは aFragmentをロードするメニューがあります(つまり、ギャラリーが親で、写真とビデオが子です)。photosvideos FragmentFragmentFragments

フォト ギャラリーとビデオ ギャラリーをスタックに追加できるようにするために、GalleryFragment で使用します。

if(mType.equals("photos")){
    Fragment videoFragment = new VideoFragment();
    fragmentTransaction.replace(R.id.sub_container, videoFragment, "");
    ((MainActivity)getActivity()).addFragmentToStack(this);
}
else{
    Fragment photoFragment = new PhotoFragment();
    fragmentTransaction.replace(R.id.sub_container, photoFragment, "");
    ((MainActivity)getActivity()).addFragmentToStack(this);
}   

GalleryFragmentつまり、親をスタックに追加します。

たとえば、ビデオから写真ギャラリーに移動して back を押すと、のButtonコードが実行され、現在のインスタンスがスタック内のインスタンスに置き換えられますが、空です (またはは呼び出されません)。MainActivityonBackPressedGalleryFragmentsub_containeronCreateViewonResume

誰でも助けることができますか?

4

1 に答える 1

0

同じインスタンスをスタックに追加することはお勧めできません。代わりに、新しいインスタンスを追加すると、完全に機能します。つまり、次のようになります。

それ以外の

((MainActivity)getActivity()).addFragmentToStack(this);

使用する

GalleryFragment fragment = new GalleryFragment();
Bundle bundle = new Bundle();
bundle.putString("type", "photos"); // or bundle.putString("type", "videos");
                                    // in order to know what to load once in there
fragment.setArguments(bundle);
((MainActivity)getActivity()).addFragmentToStack(fragment);
于 2013-04-29T21:01:32.693 に答える