如何设置Fragment
的Id
才能使用getSupportFragmentManager().findFragmentById(R.id.--)
发布于 2014-02-19 16:44:33
事实证明,您可能不需要知道片段id。
从文档中:
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”。
所以:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_holder, new AwesomeFragment())
.commit();
然后
AwesomeFragment awesome = (AwesomeFragment)
getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
将得到R.id.fragment_holder中包含的任何(令人敬畏的)片段。
发布于 2013-01-27 02:19:27
在大多数情况下,您既可以使用片段标记,也可以使用ID。
您可以在FragmentTransaction.add(Fragment fragment, String tag );
中设置标签值。然后,您可以使用命令FragmentManager.findFragmentByTag(String tab)
查找有问题的片段。
发布于 2013-07-15 23:38:54
正如Tom和其他人已经提到的,有一些方法可以将标记放在片段上并使用该标记进行识别。我在这些解决方案中遇到的一个后续问题是,直到片段与活动(或者实际上是FragmentManager
)相关联时,它才会获得标记。如果需要在标记之前识别片段,该怎么办?
到目前为止,我的解决方案都依赖于世界上最古老的(Java)技巧:创建一个最简单的模板片段,它在它的一个构造函数中接受一个id,并提供一个返回该id的getFragmentId()
方法。然后,我让那些需要早期识别的片段扩展该模板,然后:瞧!问题解决了。
不幸的是,这个解决方案可能需要一组模板片段,每种片段类型都需要一个模板片段,ListFragment
、DialogFragment
或普通旧式Fragment
(POFO?!)需要及早识别的人。但考虑到所提供的收益,我认为在片段的情况下这是可管理的。
抱歉撕裂愈合的创伤:-)
干杯!
https://stackoverflow.com/questions/9363072
复制相似问题