我有一个MainActivity
加content_container
加载Fragments
。
其中一个Fragment
我还有一个sub_container
来加载Fragments
。
在MainActivity
i管理后退按钮,堆栈为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
时,我都会使用
Fragment someFragment = new SomeFragment();
fragmentTransaction.replace(R.id.content_container, ((MainActivity)getActivity()).addFragmentToStack(someFragment), "");
fragmentTransaction.commit();
一个Fragment
是一个图库,其中包含一个加载photos
或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
。
例如,当我从视频转到照片库时,按下后面Button
,MainActivity
的{{1}}中的代码将被执行,而当前{{ 1}}实例被堆栈中的实例替换,但其onBackPressed
为空(不调用GalleryFragment
或sub_container
)。
有人可以帮忙吗?
答案 0 :(得分: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);