android - onClick RecyclerView.ViewHolder 不起作用
问题描述
我正在关注 Google 官方 Codelabs(此处)上出现的 Shrine 示例应用程序。
我想创建一个简单的视图(像其他片段一样的片段)以在单击时显示任何项目的详细文本。
我认为在元素上实现 onClick 的最佳方法是在StaggeredProductCardViewHolder
我看到它实现的类中RecyclerView.ViewHolder(itemView)
。
这是我已经尝试过的,但我什至无法点击屏幕上任何地方的任何项目,所以出了什么问题?
class StaggeredProductCardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var productImage: NetworkImageView = itemView.findViewById(R.id.product_image)
var productTitle: TextView = itemView.findViewById(R.id.product_title)
var productPrice: TextView = itemView.findViewById(R.id.product_price)
override fun onClick(v: View?) {
println("wow clicked")
v?.context?.startActivity(Intent(v.context, ProductCardDetailActivity::class.java))
}
class ProductCardDetailActivity : Fragment(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("onCreate")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
println("onCreateView")
return super.onCreateView(inflater, container, savedInstanceState)
}
}
}
注意:我添加了一个片段ProductCardDetailActivity
,我将在其中实现其他方法以在单击时显示项目片段描述。
我真的不知道从哪里开始,从哪里开始,否则我会在这方面付出更多的努力,但我会一直在努力。
解决方案
您只是在实现 View.OnClickListener 接口。它对处理点击没有任何作用。您应该附上这个以供视图持有者查看
class StaggeredProductCardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var productImage: NetworkImageView = itemView.findViewById(R.id.product_image)
var productTitle: TextView = itemView.findViewById(R.id.product_title)
var productPrice: TextView = itemView.findViewById(R.id.product_price)
init{
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {
println("wow clicked")
v?.context?.startActivity(Intent(v.context, ProductCardDetailActivity::class.java))
}
class ProductCardDetailActivity : Fragment(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("onCreate")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
println("onCreateView")
return super.onCreateView(inflater, container, savedInstanceState)
}
}
}
推荐阅读
- tensorflow - tensorflow 与 anaconda 和 python 版本冲突
- user-interface - 光子碰撞问题
- d3.js - 使用 scala.js 创建条形图
- python-3.x - tkinter 网格识别不起作用,无法识别每个像素
- android - gradle build 未检测到 build.gradle 中的 android ndkVersion
- sql - 通过 pl/sql 过程将带有行间距和空值的逗号分隔值拆分为表中的列
- html - css not showing completely in gmail
- spring-boot - Jhipster Ldap 集成坏凭证错误
- php - 基于 WooCommerce 中产品的自定义产品价格后缀
- c# - 在 TrackBar 中设置另一个值后 GDI 替换绘图