在适配器和片段中设置 onClickListener 的区别
Difference between setting onClickListener in adapter and in fragment
在我的代码中,我有 fragment 和 gridview。我也有这个 Gridview 的 ArrayAdapter。现在我需要在单击时更改网格单元格的背景颜色。我通过设置 onClickListener 来做到这一点。
问题是在适配器和片段中为 GridView 单元格设置 onClickLister 有什么区别?
我将尝试稍微澄清一下您问题中涉及的不同 android 实体。
一个GridView
是一个View
。
您可以将点击侦听器分配给视图,以便它们对用户点击做出反应。任何视图都有一个通用的点击监听器 (View.setOnClickListener
),每当用户点击视图的任何部分时都会调用该监听器
复杂的视图可以有几个其他更专业的点击监听器,例如,menu-like 视图(ListViews、GridViews 等)也会有一个 setOnItemClickListener
/ setOnItemLongClickListener
每当用户点击一个项目(相对于整个视图)时都会被调用
一个Adapter
只是一个class,其目的是用数据构建视图到data-consuming视图。例如,您的 GridViewAdapter
: 它将为每一行调用一次,并将构造每个行视图(在 getView 方法中)。每个行视图(可能)将是一个 ViewGroup
(FrameLayout
/RelativeLayout
...),其中包含一些其他视图(即图标 ImageView
、名称 TextView
, 地址...)
所以适配器本身不接受点击监听器。但是适配器创建的视图可以!例如,假设您的 GridView
是一个 Phone 列表:
您的 GridView
有一个 ItemClickListener
来响应所选的 phone 列表条目并显示有关联系人的信息
您的 GridView
适配器为每一行构建视图。假设您的 'contact' 行有 3 个视图:标题、图标和删除联系人的按钮
在您的适配器中,您将向 "delete contact" 按钮 View 分配一个 onClickListener。请注意,您始终将 onClickListeners
分配给视图,而不是适配器本身 ("you can't click an adapter!")
关于片段,将它们视为 "sub-activities"。片段包含具有多个视图的根布局。同样,它将在您分配点击监听器的那些视图中,而不是片段本身。
在我的代码中,我有 fragment 和 gridview。我也有这个 Gridview 的 ArrayAdapter。现在我需要在单击时更改网格单元格的背景颜色。我通过设置 onClickListener 来做到这一点。
问题是在适配器和片段中为 GridView 单元格设置 onClickLister 有什么区别?
我将尝试稍微澄清一下您问题中涉及的不同 android 实体。
一个GridView
是一个View
。
您可以将点击侦听器分配给视图,以便它们对用户点击做出反应。任何视图都有一个通用的点击监听器 (
View.setOnClickListener
),每当用户点击视图的任何部分时都会调用该监听器复杂的视图可以有几个其他更专业的点击监听器,例如,menu-like 视图(ListViews、GridViews 等)也会有一个
setOnItemClickListener
/setOnItemLongClickListener
每当用户点击一个项目(相对于整个视图)时都会被调用
一个Adapter
只是一个class,其目的是用数据构建视图到data-consuming视图。例如,您的 GridViewAdapter
: 它将为每一行调用一次,并将构造每个行视图(在 getView 方法中)。每个行视图(可能)将是一个 ViewGroup
(FrameLayout
/RelativeLayout
...),其中包含一些其他视图(即图标 ImageView
、名称 TextView
, 地址...)
所以适配器本身不接受点击监听器。但是适配器创建的视图可以!例如,假设您的 GridView
是一个 Phone 列表:
您的
GridView
有一个ItemClickListener
来响应所选的 phone 列表条目并显示有关联系人的信息您的
GridView
适配器为每一行构建视图。假设您的 'contact' 行有 3 个视图:标题、图标和删除联系人的按钮在您的适配器中,您将向 "delete contact" 按钮 View 分配一个 onClickListener。请注意,您始终将
onClickListeners
分配给视图,而不是适配器本身 ("you can't click an adapter!")关于片段,将它们视为 "sub-activities"。片段包含具有多个视图的根布局。同样,它将在您分配点击监听器的那些视图中,而不是片段本身。