Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onClick on RecyclerView.ViewHolder不工作_Android_Kotlin_Android Recyclerview - Fatal编程技术网

Android onClick on RecyclerView.ViewHolder不工作

Android onClick on RecyclerView.ViewHolder不工作,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我关注的是谷歌官方代码实验室()上出现的神社示例应用程序 我想创建一个简单的视图(片段和其他片段一样),在单击时显示任何项目的详细文本 我认为实现onClick-on元素的最佳方法是在StaggeredProductCardViewHolder类中,因为它实现了RecyclerView.ViewHolder(itemView) 这是我已经尝试过的,但我甚至不能在屏幕上的任何地方点击任何项目,所以出了什么问题 class StaggeredProductCardViewHolder(itemVie

我关注的是谷歌官方代码实验室()上出现的神社示例应用程序

我想创建一个简单的视图(片段和其他片段一样),在单击时显示任何项目的详细文本

我认为实现onClick-on元素的最佳方法是在
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)
    }
}

}

适配器代码在哪里?请在此处添加适配器代码,以便我们看到问题。您覆盖了onClick事件,但尚未编写setOnClickListener来实际调用该事件。至少不在这里。我明白了,我正在像后贝娄一样尝试一下。它有意义吗?您需要设置一个侦听器来接收单击事件,以便
视图可以将事件传递给该侦听器。通过实现
View.OnClickListener
并重写
onClick
,您已经使您的类成为了一个合适的侦听器—现在您只需将其传递给视图即可使用:)是的,是的,我看到我没有将侦听器附加到对象,该对象在单击时会以某种方式表现,并且实现在onClick中。泰