代码之家  ›  专栏  ›  技术社区  ›  Curcuma_

单击RecyclerView。ViewHolder不工作

  •  0
  • Curcuma_  · 技术社区  · 5 年前

    我正在关注谷歌官方Codelabs上出现的Shrine示例应用程序( here ).

    我想创建一个简单的视图(像其他Fragments一样的Fragment)来显示单击时任何项目的详细文本。

    我认为实现Click 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 在这里,我将实现其他方法,以便在单击时显示项目片段描述。

    我真的不知道从哪里开始,往哪里走,否则我会在这方面付出更多的努力,但与此同时,我一直在努力。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Rustam Samandarov    5 年前

    您只是在实现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)
        }
    }
    

    }