我已经Xamarin
在.Android
LayoutInflater
我最近在使用或滥用此功能时遇到了问题。解决了这个问题:Textview is not added to my layout,问题来自不应该使用 LayoutInflater 。
我已经阅读了文档,它说它将xml 布局实例化为其view
对应的. 这让我想到,当我“膨胀”一个布局时,我正在从那个 XML 创建一个空布局。
在这篇文章中,他们将 aLayoutinflater
与海滩充气机进行了比较,我理解它内部XML
像气体一样的隐喻,而沙滩球将是变量类型vista
/View
加载位置XML
是这样吗?我知道这可能看起来很简单,但是这一切都让我感到不安。
它可以有什么优势?我什么时候可以更方便地使用Layoutinflater
变量来赋值aFindViewById()
并直接传递布局?
您的意思是LayoutInflater,实际上 inflater 是通常用于在 Android 中为布局充气的变量的名称:
要确定差异,有必要了解定义:
关于你的问题:
这是一个很好的比较,“充气机”给海滩布局充气:
但在此视图 (layout_playa) 中,您可以找到类似
pelota
、sombrilla
、 的元素lentes_sol
:要访问这些元素,您可以使用FindViewById()在之前通过其 id 膨胀的视图中搜索,因为这些元素位于视图内:
通过FindViewById()获得的视图引用必须存在,这一点很重要,否则您将获得空值。
实际上它的用途是不同的,LayoutInflater在其对应的视图对象中创建一个布局 XML 文件的实例,这个视图不需要存在于您的活动布局中,而是存在于资源中,而使用FindViewById()来搜索视图处于先前膨胀的布局中:
LayoutInflater的另一个示例假设您必须在列表单元格为偶数时“膨胀”一种类型的单元格,而当它为奇数时必须“膨胀”另一种类型:
public override View GetView(int position, View convertView, ViewGroup parent) {
作为FindViewById()的示例,您在布局 (
layout_app
) 中搜索视图 (TextView
) 通过其 id (Resource.Id.tv_titulo
) 的引用并修改某些属性,在这种情况下您分配一个文本。LayoutInflater基本上它的作用是引用/实例化axml布局,以便能够使用其中的视图。当您在屏幕上加载内容时,例如 a
Activity
,您这样做是SetContentView
为了表明该屏幕的内容指向特定布局。这意味着您要FindViewById
在该Activity中搜索的引用应仅附加到您已加载的该布局。通常,一个 Layout 的主视图是一个ViewGroup(例如 ,
LinearLayout
等FrameLayout
...),一个包含子级的布局类型父级,因此如果您尝试创建FindViewById
一个不属于该ViewGroup的视图或子级,对于例如,它在另一个axml 布局中,而不是为特定屏幕加载的布局Activity
,那么它将返回一个对您的引用null
。让我们看下面的例子:假设你想创建不同的屏幕。使用包含
Button
带有 idbutton
的 a 和TextView
带有id 的 a 的相同布局textView
。通过 axml 执行此操作有很多选择,例如使用include标签。但是,如果您想以编程方式执行此操作,则应在此处使用 LayoutInflater。例如: ,在 a
Xamarin.Android (C#)
中使用LayoutInflaterActivity
:这样,您已经在
LinearLayout
. 如果您想访问它Button
并TextView
修改它们,您可以简单地执行以下操作:您现在可以自定义它并分配您想要的属性。