【问题标题】:LayoutInflater how excatly make the new ViewLayoutInflater 如何快速创建新视图
【发布时间】:2023-01-12 22:28:48
【问题描述】:

我已经阅读了其中一个答案here,但我仍然感到困惑。

》》刚开始Android编程的时候,真的被LayoutInflater和findViewById弄糊涂了。有时我们使用一个,有时使用另一个。

LayoutInflater 用于从您的一个 xml 布局创建一个新的视图(或布局)对象。

findViewById 只是为您提供对已创建视图的引用。您可能认为您还没有创建任何视图,但只要您在 onCreate 中调用 setContentView,活动的布局及其子视图就会在幕后膨胀(创建)。”

我想我明白了,当 LayoutInflater 创建一个新对象 View 时,为什么我们不能这样做:

view = new View(context);

view = findViewById(R.id.textView);

我错过了什么?谢谢你的回答。

我试图理解 LayOutInflater 的工作方式

【问题讨论】:

    标签: java android xml android-studio layout-inflater


    【解决方案1】:

    简而言之:LayoutInflater 帮助您将以 XML 编写的布局“交换”为代码,它是一种解析器,它接受 XML 输入并使用 Context 创建适当的 Views(new View 对象创建的一些简单方法您问题中的第一行代码)

    Activity 在后台为我们开发人员提供了简单的setContextViewfindViewById 方法,但您可能还想添加一些自定义的 View 额外定义在 XML 中(因为一些 if)或 doring 运行时,然后你可以使用基于相同ContextLayoutInflater,已经创建/显示的视图正在使用(例如Activity本身)

    请注意,当您使用 setContentView 时,LayoutInflater 会将一些基于 XML 的 Views 附加到 Activity,因此进一步行

    view = findViewById(R.id.textView)
    

    将返回对已经膨胀的现有View的引用,同时

    view = new View(context)
    

    只是使用上下文在内存中创建一些虚拟View,它不会添加到ActivityFragment,任何显示ViewGroup,因此甚至不可见(并且它与找到的view实例不同与findViewById

    【讨论】:

    • 我明白这一点。所以行 view = new View(context); view = findViewById(R.id.textView);
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多