android开发分享Android – 设置片段ID

如何设置一个FragmentId以便我可以使用getSupportFragmentManager().findFragmentById(R.id.--)

    您不能以编程方式设置片段的ID

    然而,你可以在FragmentTransaction中设置一个String tag ,它可以用来唯一标识一个Fragment。

    正如Aleksey指出的那样,您可以将ID传递给FragmentTransactionadd(int, Fragment)方法。 但是, 这并不指定片段的ID。 它指定要插入FragmentViewGroup的ID。 这对于我所期望的目的来说并不是那么有用,因为它并不唯一地标识Fragment ,而是ViewGroup 。 这些ID是可以dynamic添加一个或多个片段的容器 。 使用这种方法来识别Fragment将需要您dynamic地将ViewGroup添加到您插入的每个Fragment的布局。 这将是非常麻烦的。

    所以如果你的问题是如何创build一个dynamic添加的Fragment的唯一标识符,答案是使用FragmentTransaction的add(int containerViewId,Fragment fragment,String tag)方法和FragmentManager的findFragmentByTag(String)方法。

    在我的一个应用程序中,我被迫dynamic地生成string。 但是,相对于实际的FragmentTransaction而言,这并不是那么昂贵。

    标记方法的另一个优点是它可以识别未被添加到UI的片段。 请参阅FragmentTransaction的add(Fragment,String)方法。 Fragment s不需要View s! 它们也可以用来在configuration更改之间保持短暂状态!

    原来你可能不需要知道片段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举行。

    在大多数情况下,您可以使用片段标签以及ID。
    您可以在FragmentTransaction.add(Fragment fragment, String tag );设置标签值FragmentTransaction.add(Fragment fragment, String tag ); 。 然后,您可以使用命令FragmentManager.findFragmentByTag(String tab)来查找有问题的片段。

    正如Tom和其他人已经提到的那样,有一些方法可以在一个片段上添加一个标签,并使用该标签进行识别。 我遇到的这些解决scheme的后续问题是,片段在与Activity(或实际上, FragmentManager )关联之前不会获得标签。 如果需要在标记之前识别片段,该怎么办?

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

    不幸的是,这个解决scheme可能需要一组模板片段,一个用于每个片段types,一个需要及早识别的ListFragmentDialogFragment或普通旧Fragment (POFO ?!)。 但考虑到所提供的收益,我认为这是可以控制的。

    抱歉撕毁愈合伤口:-)

    干杯!

    使用以下内容:

    要添加一个片段:

     getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentToBeAdded, tag).commit(); 

    要识别现有的片段:

     getFragmentManager().findFragmentByTag(fragmentName); 

    除了Tom的回答之外,replace方法还支持fragment标签,另外还有add方法。

      以上就是android开发分享Android – 设置片段ID相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/516644.html

      (0)
      上一篇 2020年12月3日
      下一篇 2020年12月3日

      精彩推荐