2014-01-21 22 views
3

我知道我可以创建片段并通过Tag或Id添加它。是否可以使用任何一个?为什么我应该使用一个吗?有什么原因吗?通过Tag或Id访问片段之间的区别

model = new ModelFragment(); 

//tag 
getSupportFragmentManager().beginTransaction().add(model, "tag").commit(); 
//id 
getSupportFragmentManager().beginTransaction().add(4, model).commit(); 

回答

1

我相信,如果它是一个静态Fragment(即通过XML)则只能添加一个idFragment。如果您想通过FragmentTransaction动态添加Fragments,则add()的第三个参数是标签的String。提供标签是可选的,但建议您稍后可以保留Fragment

在您显示的id案例中,add()的第一个参数是您想要将Fragment添加到的容器的布局ID,而不是Fragment本身的id。

3

ID用于静态片段,在活动生命周期中您不想修改其状态的片段。

动态地添加一个片段使用标签:

android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_container, fragment, TAG); 
    ft.commit(); 

在哪儿找个片段在代码中,使用类似:

if(getFragmentManager().findFragmentByTag(TAG)!=null){ 
     ft.remove(getFragmentManager().findFragmentByTag(TAG)); 
     ft.commit(); 
} 
+1

您能提供一个指向Android文档的链接吗? –

1

ID用于识别容器这个片段将被放置成。 Taken from documentationcontainerViewId该片段将被放置的容器的可选标识符。如果为0,则不会将其放置在容器中。
使用此ID,您可以稍后使用findFragmentById检索片段 - 请参阅下文。

标记是由片段管理器用来稍后标识和检索片段的标签。通过使用标签,无论容器包含哪个片段,都可以识别片段。

可以同时使用或单独使用ID和标签。 FragmentManager可以通过both idtag来识别片段。

相关问题