安卓:如何在单个活动中管理片段?

3
我想知道我是否可以像管理 Activity 一样管理 Fragment。我使用 Fragment 实现了选项卡功能(事实上,我无法从 TabHost 中使用 startActivityForResult 得到结果),我希望在选择选项卡菜单时调用每个片段并保存其先前的视图,就像使用 intent 和 FLAG_ACTIVITY_REORDER_TO_FRONT 一样。每当我替换片段时,程序总是创建新片段。有什么想法吗?提前感谢。
附注:我尝试使用 savedInstanceState,但 Bundle 只提供 putInt、putString、putBundle 等方法。是否可能保存视图或其他对象?
@PatrickBoos 这是我的代码。在声明 FragmentManager fm 和 FragmentTransaction ft 后。
AFragment fragment = AFragment.getInstance();
if (!fragment.isAdded())
    ft.replace(res, fragment, tag);
ft.commit();

AFragment.newInstance()的实现如下:

AFragment mThis;
public static AFragment getInstance() {
    if (mThis == null)
        mThis = new AFragment();
    return mThis;
}

你能展示一下你替换片段的代码吗?我猜想你总是创建一个新的片段。尝试保存已创建的选项卡的引用,并在替换片段时使用它们。 - Patrick Boos
1个回答

4
尝试使用类似下面的代码来重用片段:

请尝试使用类似下面的代码来重用片段

ContactListFragment contactListFragment = 
     (ContactListFragment)getFragmentManager().findFragmentByTag("ContactList");
if(contactListFragment == null){
contactListFragment = new ContactListFragment();
}
ft.replace(R.id.fragment_container, contactListFragment,"ContactList";
ft.commit();    

感谢您的关注。但不幸的是,它无法工作。它会抛出IllegalStateException异常,因为该片段不能被添加两次(错误消息显示“Fragment already added”)。 - khcpietro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接