【问题标题】:Update fragment in android在android中更新片段
【发布时间】:2013-01-18 16:17:45
【问题描述】:

假设我有一些片段显示和做某些事情。现在,基于某些事件,我想更改片段的屏幕(或内容)。 [编辑]

例如。

我的第一个布局,布局 A,有一个列表视图。另一个布局,布局 B 有一个表格视图。我目前在片段中显示布局 A。单击列表项时,我想在同一片段中显示布局 B。

这是怎么做到的?

谢谢。

【问题讨论】:

  • 这是一个非常广泛和普遍的问题。你能说得更具体点吗?
  • 我已编辑问题以包含更多详细信息。谢谢。

标签: android android-fragments updates android-listfragment android-fragmentactivity


【解决方案1】:

我的第一个布局,布局 A,有一个列表视图。还有另一种布局,布局 B 有一个表格视图。我目前在 分段。在列表项单击时,我想以相同的方式显示布局 B 片段。

这是怎么做到的?

您可以使用新的嵌套片段 API(可通过兼容性包和普通片段 API 16+ 获得)。而不是当前的Fragment 包含ListView(您将用表格替换它),您将拥有一个包装器Fragment,它的视图具有单个FrameLayout 的内容。

然后,您将创建两个片段,一个包含ListView 并包含表格布局。最初,您将基于列表的片段添加到包装片段以获得开始布局,并且在项目单击事件中,您将使用getChildFragmentManager() 将基于列表的片段替换为基于表格的片段(全部在包装片段中) .

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,我会这样做。

    我假设您已经为列表片段(片段 A)和视图片段(片段 B)创建了片段类。

    我们可以使用 fragmentManager 来交换布局视图中的片段。

    //grab fragmentManager, this will allow us to switch out fragments
    FragmentManager fragManager = getFragmentManager();
    FragmentTransaction fragTransaction = fragManager.beginTransaction();
    
    //first remove the current fragment
    fragTransaction.remove(fragManager.findFragmentById(R.id.layout_view));
    
    //replace the current FragmentA with FragmentB
    fragTransaction.replace(R.id.layout_view, new FragmentB());
    
    //add to backstack if you want the android back button to work properly
    fragTransaction.addToBackStack(null);
    
    //and lastly, we commit the changes to the fragmentManger's transaction
    fragTransaction.commit();
    

    希望这会有所帮助。

    【讨论】:

    • 替换片段会确保新片段占用与前一个片段相同的屏幕空间还是取决于布局?
    • @Namratha 有几种不同的方式可以像以前一样占用全屏空间。根据你的初始布局,你有 标签,宽度/高度是什么,以及 FragmentA 或 FragmentB 内部的布局将决定布局大小以及它是否填满整个屏幕。跨度>
    • 我明白了。谢谢。我的片段 B 将在与片段 A 相同的 xml 文件中声明,对吗?那么,应用程序如何知道要显示哪个片段?
    • 我试过你建议的方法。片段 B 显示在片段 A 的正上方。所以我可以看到一片混乱。为什么即使在 remove 和 replace 调用之后之前的片段也没有被删除?
    • 不,FragmentA 和 FragmentB 会有不同的 xml 文件以及不同的 Fragment 类文件。请务必将 fragmentTransaction.remove() 与动态创建的片段一起使用,而不是在同一 xml 文件中使用片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多