【问题标题】:Assigning ID to dynamically created ListFragment将 ID 分配给动态创建的 ListFragment
【发布时间】:2013-02-28 10:56:07
【问题描述】:

我目前正在为 Android 编写这段代码,它有一个动态创建的列表片段。甚至列表视图也被动态分配给它。它从 SQL Lite 中获取一个简单的游标对象并将其分配给适配器。

这一切都很好,问题是当方向发生变化时,savedInstanceState 包总是为空。即使我覆盖 OnSaveInstanceState 并将项目添加到该包或 onCreateView。我做了一些研究,发现这是因为片段没有分配给它的 ID。

关于将 ID 分配给 listfragment 的位置以及如何分配,我遇到了一些问题。我正在使用 FragmentTransaction 并使用 TAG 标识符。

我将不胜感激有关此事的任何帮助。

谢谢。

【问题讨论】:

    标签: android bundle fragment


    【解决方案1】:

    看看这个问题:Android - Set fragment id

    您不能为动态创建的片段分配 ID。

    但是,您可以创建一个 .xml 布局文件并使用 android:id="@+id/my_fragment" 为您的片段分配一个 ID。您是否有理由不使用 xml 定义的片段?

    【讨论】:

    • 我之前在看这个问题,我只是更深入地阅读了一遍,我很遗憾地发现您无法将 ID 分配给动态创建的片段(这没有任何意义-1 用于 android 开发团队)。我开始使用动态创建的片段来编写我的整个应用程序,因为它非常好的实践和非常好的代码可重用性。没关系,尽管这不是一项不可能完成的任务,但我可以将 sharedpreferences 与对象序列化一起使用来完成任务。我只是想弄清楚我是否可以避免这种方法。
    • 当我刚开始探索 Android 时,我也尝试使用动态创建的布局来编写我的应用程序,但后来我意识到通过 xml 布局文件实际上更容易做到这一点。代码可重用性不会受到影响,它可以让您将 UI 和算法分开。只是我的 2 美分。
    • 我拒绝学习的一课,哈哈,但对于我的应用程序,我使用 sherlockActionBar 和切换开关在每个选项卡中动态替换多个片段,因此我不能为此使用 xml 布局。
    【解决方案2】:

    您可以在进行交易时执行此操作。如果你打电话

    FragmentTransaction.replace(containerViewId, fragment, tag);
    

    FragmentTransaction.add(fragment,tag)
    

    FragmentTransaction.add(containerViewId, fragment, tag);
    

    然后您可以像这样使用tag 获取对Fragment 的引用

    FragmentManager.findFragmentByTag(tag);
    

    【讨论】:

    • 我知道这一点。这正是我将片段添加到事务管理器的方式(通过 TAG)。问题完全不同,当发生方向更改时,我无法保留我的 savedInstanceState 包,因为片段没有 ID。我对如何将 ID 分配给已通过 TAG 动态添加到 fragmenttransaction 对象的动态创建的片段感到困惑。
    • 不幸的是,我认为向片段添加 ID 的唯一方法是在 xml 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2021-12-28
    • 2021-05-30
    • 2011-10-08
    • 2013-03-25
    相关资源
    最近更新 更多