2011-10-04 108 views
2

我想在我的活动中动态地用另一片段替换片段。Android添加没有交易的片段

它看起来就像你不能代替在布局文件静态定义一个片段,有一个动态创建的片段: Android: can't replace one fragment with another

建议的解决方案是动态地添加原始片段的onCreate方法:

public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ShelfFragment shelves = new ShelfFragment(); 
    ft.add(R.id.left_fragment, shelves); 
    ft.addToBackStack(null); 
    ft.commit(); 
    } 

这会起作用,但是当用户按下后退按钮时,原始碎片被移除而不是关闭活动,因为FragmentTransaction将其添加到FragmentManager堆栈。

有没有方法可以在没有事务/堆栈条目的情况下将初始片段添加到我的活动中?

回答

3

不要将它添加到后台。删除ft.addToBackStack(null);行,如果您希望能够使用后退按钮返回到之前的状态,则只需要此行。

+1

删除addToBackStack调用可以工作,但如果您稍后尝试使用FragmentTransaction.replace替换原始片段,则在点击后退按钮时原始片段不会返回。 –