适配器不会在recyclerview中渲染元素,日志中没有错误

问题描述 投票:0回答:1

Adapter在recyclerview中没有渲染元素,logcat中也没有错误。 我更改了 recyclerview 的背景,我知道它会显示,但我添加到其中的元素不会出现。以相同方式编写的适配器适用于不同的活动。

主要活动

class MainActivity : AppCompatActivity(), DomainAdapter.OnClickListener {
    lateinit var adapter: DomainAdapter
    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.rvDomains.layoutManager = LinearLayoutManager(this)

        binding.btnSearch.setOnClickListener{
            adapter = DomainAdapter(this, mutableListOf(DomainCVE(binding.etSearch.text.toString())), true)
            adapter.notifyDataSetChanged()
        }
    }

    override fun onClick(domain: DomainCVE) {
        val intent = Intent(this, DomainActivity::class.java)
        intent.putExtra("domain", domain)
        startActivity(intent)
    }
}

适配器

class DomainAdapter(private val context: Context, private val domain: MutableList<DomainCVE>, private val load: Boolean): RecyclerView.Adapter<DomainAdapter.DomainViewHolder>() {

    class DomainViewHolder(item: View): RecyclerView.ViewHolder(item){
        val binding = DomainItemsBinding.bind(item)

        fun bind(domain: DomainCVE, listener: OnClickListener) = with(binding){
            itemView.setOnClickListener {
                listener.onClick(domain)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DomainViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.domain_items, parent, false)
        return DomainViewHolder(itemView)
    }

    override fun getItemCount(): Int {
        return domain.size
    }

    override fun onBindViewHolder(holder: DomainViewHolder, position: Int) {
        holder.binding.tvDomainName.text = domain[position].address
        if (load){
            holder.binding.ivDone.visibility = View.INVISIBLE
            holder.binding.ivLoad.visibility = View.VISIBLE
        }else{
            holder.binding.ivDone.visibility = View.VISIBLE
            holder.binding.ivLoad.visibility = View.INVISIBLE
        }
    }

    interface OnClickListener {
        fun onClick(domain: DomainCVE)
    }
}

android kotlin android-recyclerview android-adapter
1个回答
0
投票

所以可能有两个原因:

  1. 您正在按钮的 onClick 中创建适配器,这意味着您的数据将在单击某个按钮后显示,请考虑执行以下操作:
adapter = DomainAdapter(this, mutableListOf(DomainCVE(binding.etSearch.text.toString())), true)
binding.rvDomains.adapter = adapter
binding.btnSearch.setOnClickListener{
    adapter.updateData(mutableListOf(DomainCVE(binding.etSearch.text.toString())))
}
  1. 您没有将适配器分配给 onClick 中的回收器视图
binding.btnSearch.setOnClickListener{
    adapter = DomainAdapter(this, 
    mutableListOf(DomainCVE(binding.etSearch.text.toString())), true)
    binding.rvDomains.adapter = adapter
    adapter.notifyDataSetChanged()
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.