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)
}
}
所以可能有两个原因:
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())))
}
binding.btnSearch.setOnClickListener{
adapter = DomainAdapter(this,
mutableListOf(DomainCVE(binding.etSearch.text.toString())), true)
binding.rvDomains.adapter = adapter
adapter.notifyDataSetChanged()
}