Gra*_*eme 145 android android-fragments android-nested-fragment
我想知道这是否是Android API中的一个错误:
我有这样的设置:
?----?---------?
| | |
| 1 | 2 |
| |?-------?|
| || ||
| || 3 ||
?----??-------??
Run Code Online (Sandbox Code Playgroud)
此功能在手机上非常有效(其中1和2和3为ActivityFragments).
但是,当我使用此代码时:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
其中R.id.leftPane和R.id.rightPane是<fragment>S IN水平线性布局.
据我所知,上面的代码删除了驻留的片段,然后用新的片段替换它.很棒......显然不会发生这种情况,因为当第二次运行此代码时会出现以下异常:
07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
Run Code Online (Sandbox Code Playgroud)
这是因为FragmentNumber3的容器已被复制,并且它不再具有唯一ID.在添加新的片段之前,初始片段没有被销毁(?)(在我看来,这意味着它还没有被替换).
有人可以告诉我这是否可能(这个答案表明它不是)或者它是一个错误?
hac*_*bod 202
目前不支持嵌套片段.试图将片段放在另一个片段的UI中将导致未定义且可能破坏的行为.
更新:嵌套片段支持由于Android 4.2(和Android支持库修订版11):http://developer.android.com/about/versions/android-4.2.html#NestedFragments
注意(根据本文档):" 注意:当布局包含a时,不能将布局扩展为片段<fragment>.只有在动态添加到片段时才支持嵌套片段. "
Ran*_*med 98
android 4.2及更高版本支持嵌套片段
Android 支持库现在还支持嵌套片段,因此您可以在Android 1.6及更高版本上实现嵌套片段设计.
要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager().这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务.例如,这里有一些代码可以在现有的Fragment类中添加一个片段:
Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();
Run Code Online (Sandbox Code Playgroud)
要了解有关嵌套片段的更多信息,请参阅这些教程
第1
部分第2
部分第3部分
这是一篇SO帖子,讨论嵌套片段的最佳实践.
小智 33
..你可以在父片段的destroyview方法中清理你的嵌套片段:
@Override
public void onDestroyView() {
try{
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.remove(nestedFragment);
transaction.commit();
}catch(Exception e){
}
super.onDestroyView();
}
Run Code Online (Sandbox Code Playgroud)
dra*_*sia 14
我有一个我正在开发的应用程序,它与Action Bar中的Tabs类似,用于启动片段,其中一些片段中有多个嵌入的片段.
我试图运行应用程序时遇到了同样的错误.看起来如果在取消选中标签后再在xml布局中实例化片段,然后重新选择,我会得到充气机错误.
我解决了这个问题,用Linearlayouts替换了xml中的所有片段,然后使用片段管理器/片段事务来实例化片段,一切似乎至少在测试级别上正常工作.
我希望这能够帮到你.
| 归档时间: |
|
| 查看次数: |
136669 次 |
| 最近记录: |