首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -设置片段id

Android -设置片段id
EN

Stack Overflow用户
提问于 2012-02-20 22:51:55
回答 5查看 112.3K关注 0票数 118

如何设置FragmentId才能使用getSupportFragmentManager().findFragmentById(R.id.--)

EN

回答 5

Stack Overflow用户

发布于 2014-02-19 16:44:33

事实证明,您可能不需要知道片段id。

从文档中:

代码语言:javascript
复制
public abstract Fragment findFragmentById (int id)

Finds a fragment that was identified by the given id either
when inflated from XML or as the container ID when added in
a transaction.

重要的部分是“添加到事务中时作为容器ID”。

所以:

代码语言:javascript
复制
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.fragment_holder, new AwesomeFragment())
    .commit();

然后

代码语言:javascript
复制
AwesomeFragment awesome = (AwesomeFragment)
     getSupportFragmentManager()
          .findFragmentById(R.id.fragment_holder);

将得到R.id.fragment_holder中包含的任何(令人敬畏的)片段。

票数 44
EN

Stack Overflow用户

发布于 2013-01-27 02:19:27

在大多数情况下,您既可以使用片段标记,也可以使用ID。

您可以在FragmentTransaction.add(Fragment fragment, String tag );中设置标签值。然后,您可以使用命令FragmentManager.findFragmentByTag(String tab)查找有问题的片段。

票数 4
EN

Stack Overflow用户

发布于 2013-07-15 23:38:54

正如Tom和其他人已经提到的,有一些方法可以将标记放在片段上并使用该标记进行识别。我在这些解决方案中遇到的一个后续问题是,直到片段与活动(或者实际上是FragmentManager)相关联时,它才会获得标记。如果需要在标记之前识别片段,该怎么办?

到目前为止,我的解决方案都依赖于世界上最古老的(Java)技巧:创建一个最简单的模板片段,它在它的一个构造函数中接受一个id,并提供一个返回该id的getFragmentId()方法。然后,我让那些需要早期识别的片段扩展该模板,然后:瞧!问题解决了。

不幸的是,这个解决方案可能需要一组模板片段,每种片段类型都需要一个模板片段,ListFragmentDialogFragment或普通旧式Fragment (POFO?!)需要及早识别的人。但考虑到所提供的收益,我认为在片段的情况下这是可管理的。

抱歉撕裂愈合的创伤:-)

干杯!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9363072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档