关于 inflater.inflate Android 文档的困惑

2024-06-19

我正在研究此链接中的片段:http://developer.android.com/guide/components/fragments.html http://developer.android.com/guide/components/fragments.html

有一段代码如下:

public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.example_fragment, container, false);
}

}

我对 AttachToRoot 参数感到困惑,因此我在 Stack Overflow 上查找了一些帮助,并在类似问题上找到了很好的答案。所以我的理解是,如果将其设置为 true,片段将附加到活动的根布局,并从那里派生其布局参数。如果为 false,它将简单地返回膨胀布局的根,并充当片段的独立视图(从传入的容器中派生布局参数)。

现在,我在有关上述示例的 AttachToRoot 的文档中进一步阅读:

一个布尔值,指示是否应附加膨胀布局 膨胀期间的 ViewGroup(第二个参数)。 (在这种情况下, 这是错误的,因为系统已经插入充气的 布局到容器中——传递 true 会创建冗余视图 在最终布局中进行分组。)

我没有得到最后一个括号语句,它说它应该是 false,因为我们已经将布局插入到容器中。如果我们已经插入到容器中但未将 AttachToRoot 设置为 true,这意味着什么?如果该参数为true,最终的布局将如何有冗余的视图组。详细说明这部分的一个例子将会有很大的帮助。谢谢。


我通常不会回答自己的问题,但在为此做了更多研究之后,我想也许这会对其他人有所帮助。虽然Marcin的答案是正确的,但我只是回答得更详细一点。

根据代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.example_fragment, container, false);
}

第二个参数容器是一个 ID 为fragment_container 的框架布局,活动使用它来将片段添加到其布局中。

现在,如果我们深入研究 LayoutInflater 类的 inflate 方法,这就是代码(我只是突出显示代码的相关部分而不是整个部分):

// The view that would be returned from this method.
View result = root;

// Temp is the root view that was found in the xml.                     
final View temp = createViewFromTag(root, name, attrs, false);

首先,它从提供的根创建一个临时视图。

In case AttachToRoot 为 true,它这样做:

if (root != null && attachToRoot) {
    root.addView(temp, params);
}

它将上面创建的临时视图添加到根视图(即容器)。

In case 附加到根目录为 false,它执行以下操作:

if (root == null || !attachToRoot) {
   result = temp;   
}

很明显,如果AttachToRoot 为 true,它只是在向其添加临时视图后返回根(fragment_container,即 id 活动用于将片段放入其中。)(在本例中为 example_fragment 中的根视图))。

In case AttachToRoot 为 false,它只是返回片段 xml 的根,即容器参数仅用于获取片段根视图的布局参数(因为它没有根,所以它需要从某个地方获取参数)。

如果为 true,则问题出现在上面的示例中,因为返回值是 root(fragment_container 添加了视图温度,而fragment_container 默认情况下已经有一个父级。)。现在,如果您尝试执行片段事务,则您正在尝试添加子视图fragment_container(已经有一个父母到另一个 xml(您定义的用于添加片段的框架布局)。

因此,Android 会抛出以下异常:

if (child.getParent() != null) {
            throw new IllegalStateException("The specified child already has a parent. " + 
"You must call removeView() on the child's parent first.");
    }

将其设置为 true 并返回时的问题是返回的视图已经有父级,因此不能在其他地方使用。其他方式,您可以在 onCreateView (可能是 LinearLayout)内创建一个单独的视图组,将参数设置为 true,然后返回视图。然后它就会正常工作,因为视图组没有现有的父级。

这是我对上述问题的理解,我可能是错的,在这种情况下我希望任何Android专家纠正这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 inflater.inflate Android 文档的困惑 的相关文章

  • 如何在Eclipse调试器中查看崩溃原因

    按照这个 Android 教程 http developer android com resources tutorials hello world html http developer android com resources tut
  • 在 Android 的 Renderscript 中,使用 rs_script_call 结构来限制 rsForEach 调用期间操作的分配范围

    使用 Android 的 RenderScript 我尝试限制 rsForEach 调用期间操作的分配范围 根据文档 您可以通过传递 rs script call 结构来实现此目的 但每当我尝试此操作时 应用程序都会崩溃 rs script
  • 如何在每个项目的列表视图中实现简单的点赞按钮

    我的列表视图项目中有某些条目 我有一个简单的 喜欢按钮 不是像 Facebook 的按钮 您可以看到上面提到的屏幕截图 供参考 当我点击 喜欢 按钮的那一刻 我希望更改 喜欢 按钮的颜色 并且 喜欢 按钮的颜色应保持不变 改变了喜欢 当我再
  • 用于编辑文本的电子邮件键盘

    以下代码似乎不起作用 我想要电子邮件键盘 and com显示编辑文本 emailEditText setInputType InputType TYPE TEXT VARIATION EMAIL ADDRESS 将其添加到您的布局中 and
  • 如何在 Kotlin 中获取可绘制对象?

    I am working on a small project in Android Studio I have drawable added to res drawable folder 但是我无法从代码中获取它 我尝试过不同的方法 Co
  • Android 在 Nexus 设备上隐藏软键

    我想在用户启动我的应用程序时隐藏软键栏 主页 后退 菜单 我尝试使用 getWindow getDecorView setSystemUiVisibility View SYSTEM UI FLAG HIDE NAVIGATION 但不幸的
  • 尝试打开 Android XML 视图时 Eclipse 中抛出 NullPointerException?

    这是例外情况 java lang NullPointerException at android widget TextView setTextColor TextView java 1787 at android widget TabHo
  • Android SQLite 查询被 Android Studio 标记为错误

    在我的一个 Android 应用程序中 我使用了一些SQLite自从我更新到以来开始出现问题的查询Android Studio 3 0 尽管我可以编译并运行该应用程序 但它们被标记为错误 这些是查询 db execSQL INSERT IN
  • 是否可以检测Android应用程序卸载?

    我的应用程序使用 Google 的 C2DM 推送通知 来通知用户朋友的新活动 一旦他们安装了应用程序 我就会向 C2DM 服务器注册设备并存储用户的电话号码 所以我知道用户正在使用我的应用程序 我可以向他 她发送推送通知 但是 如果用户卸
  • Android avd 管理器根本不工作 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我最近想尝试创建一个 Android
  • W/Firestore:[CustomClassMapper]:Android 类没有设置器/字段

    我试图使用 Recyclerview 从 Documents 类加载数据 但 logcat 上出现错误 W Firestore 21 1 1 CustomClassMapper No setter field for Document Na
  • 通过选中/取消选中 CheckBoxPreference 来启动/停止服务

    我正在编写一个通过选中或取消选中来启动或停止服务的应用程序CheckBoxPreference我试图找到一些信息 例如示例代码或教程 但我还没有找到 如何通过选中或取消选中来启动或停止服务CheckBoxPreference这是在Prefe
  • Android Edittext Onclick Datepickerdialog 棒棒糖中出现错误

    我正在使用日期选择器对话框 它在 kitkat 上运行正常 但是当我在棒棒糖上运行应用程序时 当我单击编辑文本时 它会打开一个日期选择器对话框 但当我选择日期时 它会不幸地给出停止错误 以下是 edittext 上日期选择器的代码 priv
  • Android Widget 实现

    嗨 如果这个问题很愚蠢 我提前道歉 我对 Android 编程相当陌生 而且学得很快 我刚刚创建了一个任务提醒应用程序 并且想将该应用程序转换 实现为一个可以在主屏幕上查看的小部件 有什么方法吗 这可能吗 Thanks 如果没有更多关于您的
  • 权限拒绝:开放提供商

    我创建了一个自定义内容提供程序 更多应用程序将访问该内容提供程序 我已在提供程序 AndroidManifest xml 文件中包含了权限标签 在第二个应用程序中 我包含了 use permissions 标签 但没有成功 Logcat 向
  • 如何暂时禁用Android按钮[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想暂时禁
  • 如何在 Android Q 上将照片广播到图库

    我使用这些代码拍照并将照片广播到画廊 它有效 我发现我的广播功能使用MediaStore Images ImageColumns DATA and Intent ACTION MEDIA SCANNER SCAN FILE 并且这些已被弃用
  • 如何从双 SIM 卡设备获取两个电话号码?

    我知道如何获取用户的电话号码 但假设用户的手机是双 SIM 卡 有什么办法可以得到两个电话号码吗 目前我只能获取有效的电话号码 如果电话号码确实存储在SIM卡中 那么您可以使用subscriptionmanager API https de
  • 如何在 Android 中没有视频视图的情况下从 URL 获取视频长度(以毫秒为单位)?

    我正在 Android 中制作一个媒体播放器 我需要一个代码来获取视频长度而不使用视频视图 我在堆栈溢出中看到了很多页面 但每个页面都用于显示如何在视频视图中获取视频的长度 但我需要没有视频视图 你可以使用媒体元数据检索器 http dev
  • Hibernate 对于 Android 应用程序来说是一种杀伤力吗? [复制]

    这个问题在这里已经有答案了 我正在为我的 Android 应用程序寻找一个好的 ORM 乍一看似乎对于移动设备我更喜欢使用更简单的东西 问题是我只是在这里假设 没有真正的证据 所以我想我应该询问社区的意见 也许有人有过这样的经历 它是一个相

随机推荐

  • 您可以为 None 指定类型参数或告诉编译器它是一个 Option[String] 吗?

    我想知道我是否可以在我的代码中写这样的东西 None String 我很惊讶没有人提到它的存在Option empty scala gt Option empty String res0 Option String None 请注意 在许多
  • 无法找到请求的工厂 com.ctc.wstx.stax.WstxInputFactory

    我正在构建 Oracle Agile PLM CustomAction Px 我在Px内部调用了一个web服务来处理一些数据 我部署后 它给出了 类未找到异常 javax xml ws Service 所以我复制了jaxws api 2 1
  • Python中如何知道文件的编码? [复制]

    这个问题在这里已经有答案了 有谁知道如何在Python中获取文件的编码 我知道您可以使用编解码器模块打开具有特定编码的文件 但您必须提前知道它 import codecs f codecs open file txt r utf 8 有没有
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • python 排列有问题

    我在排列方面遇到一些问题 当谈到Python时 我真的是一个大菜鸟 所以任何帮助将不胜感激 假设我在文本文件中有一个范围为 1 6 的列表 例如 它看起来像 1 2 3 4 5 6 我想打开所述 txt 文件并计算这 6 个数字中 N 的所
  • Angular 中有主控制器好吗?

    我不知道这是否是一个好的做法 我在路由配置中定义了一个控制器 但是因为我的HomeCtrl is in ng if他听不到的声明loginSuccess所以我做了MainCtrl它监听loginSuccess并做出适当的反应 这段代码工作得
  • 如何将 DataFrame 作为输入传递给 Spark UDF?

    我有一个数据框 我想对每一行应用一个函数 该函数依赖于其他数据帧 简化的例子 我有如下三个数据框 df sc parallelize a b 1 c d 3 toDF feat1 feat2 value df other 1 sc para
  • 蓝图初始化,我可以在第一次请求蓝图之前运行函数吗

    是否可以在第一次请求特定对象之前运行一个函数blueprint my blueprint before first request def init my blueprint print yes 目前这会产生以下错误 AttributeEr
  • Spark中如何获取map任务的ID?

    Spark中有没有办法获取map任务的ID 例如 如果每个映射任务都调用用户定义的函数 我可以从该用户定义的函数中获取该映射任务的 ID 吗 我不确定您所说的地图任务 ID 是什么意思 但您可以使用以下方式访问任务信息TaskContext
  • ios 使用 HTTP POST 上传图像和文本

    谢谢阅读 我是 iOS 新手 我正在尝试使用上传图像和文本multi part form encoding在 iOS 中 The curl等价的是这样的 curl F param1 value1 F email protected cdn
  • Next.js TypeScript 错误:您没有安装所需的软件包[重复]

    这个问题在这里已经有答案了 我目前正在他们方便的 typescript starter 的帮助下构建一个基本的 nextjs 网站 使用开发时一切都运行顺利yarn dev直到大约 20 分钟前 每当我尝试运行时 我都会随机收到一条错误消息
  • 我需要从 64 位 exe 访问 32 位 dll

    我知道我阅读了有关代理进程的所有内容 并且我能够创建代理 COM 但它要么全部在 32 位中工作 要么全部在 64 位中工作 正确的结构是什么 1 32 dll 我尝试了以上两种方法 但没有成功调用32 dll 我不太了解您所指的代理 CO
  • ASP.NET MVC 多线程

    我想在我的 asp net mvc 应用程序中实现这样的逻辑 user clicks a button gt server executes some time consuming logic in 15 threads i get dat
  • Xcode 注释自动完成(appledoc 风格)

    我发现记录界面特别痛苦 因为我需要自己输入所有内容 所以我想我一定不是唯一一个这样的人 并开始寻找一种方法来减轻我的痛苦 但没有找到多少 我的问题是 有没有快捷方式或方法可以让 Xcode 自动完成我的评论 例如 我非常希望输入 tab 它
  • 使用 401 发送消息:Asp.net Web-api

    我在 ASP NET Web API 中 在登录方法中 我根据数据库检查用户 密码 如果它们不匹配 我将返回 401 状态代码以及invalid user or password method like var content new St
  • 如果字符串或整数的 getHashCode() 不能保证唯一,为什么要使用它?

    正如我在标题中所写 如果在应用程序中使用 getHashCode 不安全 为什么要使用它 对于字符串和整数 我想用它来交叉方法并排除 Linq 模型中的方法 或创建我自己的 IEqualityCompare 类 这感觉像是一个机会 如果它不
  • NetBeans IDE maven项目无法解决依赖关系

    使用 eclipse 多年后 我正在将自己移植到 NetBeans IDE 我正在打开现有的 Maven 项目 一切似乎都正常 但是当我尝试构建该项目时 它会抛出错误 提示 无法解析项目的依赖项 尽管 JAR 文件存在于我的 m2 目录中
  • 为什么 Android WebView 拒绝用户输入?

    我正在开发一个 Android 应用程序 它使用 WebView 来显示 Facebook 的登录页面 该页面加载精美 我可以选择用户名 密码文本框 但在其中输入内容将不起作用 也就是说 它们肯定有输入焦点 它们有橙色焦点突出显示框和闪烁的
  • 在asp net mvc中简单的图像上传

    我正在构建一个简单的学校门户 我一直坚持将图像上传到我的应用程序中 即用户应该将学校图像上传到我的服务器 我的图像目录为 Content Images 所有上传图像都应该上传到这个目录 我有以下代码 input type file id S
  • 关于 inflater.inflate Android 文档的困惑

    我正在研究此链接中的片段 http developer android com guide components fragments html http developer android com guide components frag