【问题标题】:Save items of checked checkboxes displayed in recycler view in a list将回收站视图中显示的选中复选框的项目保存在列表中
【发布时间】:2020-11-25 19:35:33
【问题描述】:

我设法在recycler viewcheckboxes 中显示存储在房间数据库中的项目,我想将选中的项目存储在一个列表中,将选中的项目存储在我使用setOnClickListener 的列表中复选框,如适配器中下面的代码,但是当我单击以显示列表时应用程序停止,或者即使列表显示成功,有时当我单击项目的复选框时它也会停止(有关当我删除侦听器时显示列表的信息好吧,我可以点击checkboxes,一切正常,但问题是当我添加监听器来存储选中的项目时)。

    class Adapter (val selectedFluxs : MutableList<Flux>)  : RecyclerView.Adapter<Adapter.VH>(
) {
    class VH(itemView: View) : RecyclerView.ViewHolder(itemView){
        lateinit var feed : Flux
    }
    var allFluxs : List<Flux> = listOf()
    

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
        val v = LayoutInflater
            .from(parent.getContext())
            .inflate(R.layout.item_layout, parent, false)
        val holder = VH( v )

        v.check.setOnClickListener( ) {
           // it as CheckBox
            if( v.check.isChecked ){
                selectedFluxs.add ( holder.feed )
            }else{
                selectedFluxs.remove( holder.feed )
            }
        }
        return holder
    }

    override fun getItemCount(): Int {
        return allFluxs.size
    }
    fun setFlux( allFlux : List<Flux> ) {
        this.allFluxs = allFlux
        notifyDataSetChanged()
    }
    override fun onBindViewHolder(holder: VH, position: Int) {
        holder.itemView.apply {
            Source.text = allFluxs[position].source
            Tag.text = allFluxs[position].tag
            Url.text = allFluxs[position].adr
           
            check.isChecked =
                holder.feed in selectedFluxs
        }
    }
}







 

【问题讨论】:

    标签: android kotlin android-recyclerview


    【解决方案1】:

    在实例化ViewHolder实例之前使用ViewHolder视图还为时过早,所以将监听器的代码从onCreateViewHolder移动到onBindViewHolder

    所以,你的课程代码应该是:

    class Adapter (val selectedFluxs : MutableList<Flux>)  : RecyclerView.Adapter<Adapter.VH>(
        ) {
        class VH(itemView: View) : RecyclerView.ViewHolder(itemView){
            lateinit var feed : Flux
        }
        var allFluxs : List<Flux> = listOf()
    
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
            val v = LayoutInflater
                .from(parent.getContext())
                .inflate(R.layout.item_layout, parent, false)
            val holder = VH( v )
    
            }
            return holder
        }
    
        override fun getItemCount(): Int {
            return allFluxs.size
        }
        fun setFlux( allFlux : List<Flux> ) {
            this.allFluxs = allFlux
            notifyDataSetChanged()
        }
        override fun onBindViewHolder(holder: VH, position: Int) {
            holder.itemView.apply {
                Source.text = allFluxs[position].source
                Tag.text = allFluxs[position].tag
                Url.text = allFluxs[position].adr
                setBackgroundColor(
                    if (position % 2 == 0)
                        Color.argb(30,0,220,0)
                    else
                        Color.argb(30,0,0,220)
                )
                check.isChecked =
                    holder.feed in selectedFluxs
                    
            
                holder.check.setOnClickListener( ) {
                // it as CheckBox
                if( v.check.isChecked ){
                    selectedFluxs.add ( holder.feed )
                }else{
                    selectedFluxs.remove( holder.feed )
                }
            }
        }
    }
    

    【讨论】:

    • 我在发布问题后一分钟解决了问题,实际上问题是我没有初始化变量:lateinit var feed:Holder 的通量:holder.feed = allFluxs[position]在 onBindViewHolder 方法中。我做到了,它有效。
    • 酷..请发布您的答案,以便将来对其他人有所帮助。
    • 您的代码应该根据这个答案进行调整。因为这是正确的方法。
    【解决方案2】:

    我在发布问题后一分钟解决了这个问题,实际上问题是我没有在 onBindViewHolder 方法中使用:holder.feed = allFluxs[position] 初始化 Holder 的变量:lateinit var feed: Flux。我做到了,它有效。

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多