首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由: java.lang.IllegalArgumentException多个片段引起

由: java.lang.IllegalArgumentException多个片段引起
EN

Stack Overflow用户
提问于 2015-03-13 10:46:27
回答 2查看 1.5K关注 0票数 1

我在这个问题上花了很多时间,我不知道哪里有问题。

我对A片段有反应。

A有第二片段B,B有C片段。

活动:使用R.id.container布局-> (放置下一个片段的位置)

A:用R.id.place_promo布局->

B:用R.id.container_promo布局->

C:布局有线性布局R.id.promo_container

我得到了一个错误:

代码语言:javascript
运行
复制
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f060109 (pl.xx.xx.xx:id/container_promo) for fragment FragmentxxxxOne{4252e858 #3 id=0x7f060109}

我用同样的方式放进了所有片段:

代码语言:javascript
运行
复制
getActivity()
        .getSupportFragmentManager()
        .beginTransaction()
        .replace(container, fragment)
        .commit();

有什么建议吗?

我不知道这个错误何时出现,因为它来自我的错误处理程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-13 11:05:52

公共抽象FragmentTransaction替换(int containerViewId,片段片段) 调用用空标记替换(int、片段、字符串)。

从这里..。

公共抽象FragmentTransaction替换(int containerViewId、片段片段、字符串标记) 替换添加到容器中的现有片段。这在本质上等同于对使用相同containerViewId添加的所有当前添加的片段调用remove(片段),然后用这里给出的相同参数添加(int、片段、字符串)。 参数

  • 要替换其片段的容器的containerViewId标识符。
  • 片段要放置在容器中的新片段。
  • 标记作为片段的可选标记名,以便稍后使用FragmentManager.findFragmentByTag(String)检索片段。

因此,您要在容器中替换给定的片段实例。

您还会说每个片段都是这样管理的。

您的应用程序如何工作的想法是:

  1. 获取片段的ID。我们称之为"fragID“。
  2. 转到容器视图,基于容器
  3. 根据"fragId“查找要替换的片段
  4. 移除发现的碎片
  5. 添加新的片段

问题是,当您一直在替换片段时,您总是希望已经放置了一个片段。在第一次运行时,根本没有片段,替换方法无法找到(第3点)给定的片段。

首先,您应该期待另一种添加片段的方法,只有当您需要时,您才应该替换它们,预先检查它们的存在(提示:使用FragmentManager的发现 )

更新

可能漏掉了一件可能会把事情搞砸的话。我不认为使用activity.getSupportFragmentManager()是嵌套片段的正确方法。这是向活动tho添加第一个片段的正确方法。一旦需要在第一个片段中嵌套第二个片段,就需要调用第一个片段的FragmentManager

否则,您将只将片段附加到活动

票数 1
EN

Stack Overflow用户

发布于 2015-03-13 12:06:25

这将运行良好,在onCreateView()方法中使用此方法

代码语言:javascript
运行
复制
View rootView;


if (rootView != null) {
            ViewGroup parent = (ViewGroup) rootView.getParent();
            if (parent != null)
                parent.removeView(rootView);
        }
        try {
            rootView = inflater.inflate(R.layout.myride, container, false);
        } catch (InflateException e) {

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

https://stackoverflow.com/questions/29030264

复制
相关文章

相似问题

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