0

我有MainActivity一个content_container要加载Fragments的内容。

在其中一个Fragment我也有一个sub_container要加载的Fragments.

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();
        }
    }
}

每当我想Fragmentcontent_container我的使用中替换 a

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

一个Fragment是画廊,其中有一个加载 aphotos或 a的菜单videos Fragment(因此画廊是父级Fragment,照片和视频Fragments是子级)。

为了能够在堆栈中添加照片库和视频库,我在 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时,将执行's中Button的代码,并将当前实例替换为堆栈中的实例,但它是空的(没有or被调用)。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 回答