代码之家  ›  专栏  ›  技术社区  ›  Dennis Vash

如何为RecyclerView适配器设置侦听器?

  •  0
  • Dennis Vash  · 技术社区  · 7 年前

    在我的 MainActivity 有一个 Button RecyclerView 带适配器 CheckedTextView .

    当点击 .

    按钮 static 但它不好(内存泄漏等)

    我试着从他那儿拿按钮 context 并在 simpleCheckedTextView.setOnClickListener :

    class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
        RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {
    
        inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
            ...
        }
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
            ...
        }
    
        override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
            ...
    
            holder.simpleCheckedTextView.setOnClickListener {
    
            // Getting exception
            (context as Activity).findViewById<Button>(order_button).isEnabled = true
            }
        }
    

    按钮 ? 可以为设置侦听器吗 回收视图

    3 回复  |  直到 7 年前
        1
  •  0
  •   Dennis Vash    7 年前

    (context as OrderActivity).order_button.isEnabled = true
    

    假设 order_button 是您的 OrderActivity .

        2
  •  1
  •   Gratien Asimbahwe    7 年前

    public interface RecyclerViewClickListener {
        void recyclerViewItemClicked(View view, int position);
    }
    

    在适配器内部:

    class AndroidDeviceAdapter(internal var context: Context, private val devices: Array<String>) :
        RecyclerView.Adapter<AndroidDeviceAdapter.MyViewHolder>() {
    
       ...
       private RecyclerViewClickListener recyclerViewClickListener;
       ...
    
       public void setRecyclerViewClickListener(RecyclerViewClickListener recyclerViewClickListener)
       {
       this.recyclerViewClickListener=recyclerViewClickListener;
       }
       ...
    

    然后单击添加项侦听器:

     holder.simpleCheckedTextView.setOnClickListener {
    
            recyclerViewClickListener.recyclerViewItemClicked(holder.simpleCheckedTextView, getAdapterPosition());
            }
    

    然后将侦听器附加到要执行所需操作的活动中。

    我的一些代码片段是java风格的。和你的kotlin密码结合在一起。请记住分类并使其适应kotlin。良好的编码

        3
  •  0
  •   Bö macht Blau    7 年前

    可以在内部定义接口 AndroidDeviceAdapter 像这样:

    interface MyCheckedTextListener {
        fun onCheckedTextClicked()
    }
    

    而不是 Context 参数,适配器的构造函数应采用 MyCheckedTextListener 参数:

    class AndroidDeviceAdapter(internal var checkedTextListener: MyCheckedTextListener,
         private val devices: Array<String>) : RecyclerView.Adapter<MyListAdapter.MyViewHolder>()
    

    这个 Activity 必须传入 在实例化适配器时。

    适配器将通知 活动

    override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
        holder?.simpleCheckedTextView?.setOnClickListener {
            checkedTextListener.onCheckedTextClicked()
        }
    }
    

    所以 可以设置新的 Button 国家(和 我可以留下来 private 和非 static )