#kotlin #interface #android-recyclerview
#kotlin #интерфейс #android-recyclerview
Вопрос:
Загрузка данных в Recyclerview после сгенерированного элемента события нажатия с использованием интерфейса при Activity. код приведен ниже, но действие onItemCompanyClick не выполняется.
Как сгенерировать событие нажатия и получить значение из recyclerview с помощью interfce.
MainActivity.kt
class Company : AppCompatActivity(),CompanyAdapter.Listner{
override fun onItemCompanyClick(company: Company) {
Toast.makeText(this, "You clicked: ${company.Cmp_Name}", Toast.LENGTH_LONG).show()
}
}
CompanyAdapter.kt
class CompanyAdapter(private val listner :Listner, internal var companyList: List<Company>)
:RecyclerView.Adapter<CompanyAdapter.CompanyViewHolder>()
{
interface Listner {
fun onItemCompanyClick(company: Company)
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CompanyViewHolder {
val itemView = LayoutInflater.from(p0.context).inflate(R.layout.list_view_item,p0,false)
return CompanyViewHolder(itemView)
}
override fun getItemCount(): Int {
return companyList.size
}
override fun onBindViewHolder(p0: CompanyViewHolder, p1: Int) {
// p0.rbButton.text = this!!.companyList?.get(p1)?.Cmp_Name
p0.bindModel(companyList[p1])
}
inner class CompanyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val radioButton : RadioButton = itemView.findViewById(R.id.rbCompanyName)
fun bindModel(company: Company){
radioButton.text = company.Cmp_Name
}
}
}
Ответ №1:
Ваш интерфейс никогда не вызывается, вы должны вызывать if, когда пользователь нажимает на вашу кнопку.
Попробуйте что-то вроде:
MainActivity.kt
class Company : AppCompatActivity(),CompanyAdapter.Listner{
override fun onItemCompanyClick(company: Company){
Toast.makeText(this, "You clicked: ${company.Cmp_Name}", Toast.LENGTH_LONG).show()
}
}
CompanyAdapter.kt
class CompanyAdapter(private val listner :Listner, internal var companyList: List<Company>)
:RecyclerView.Adapter<CompanyAdapter.CompanyViewHolder>()
{
interface Listner{
fun onItemCompanyClick(company: Company)
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CompanyViewHolder {
val itemView = LayoutInflater.from(p0.context).inflate(R.layout.list_view_item,p0,false)
return CompanyViewHolder(itemView)
}
override fun getItemCount(): Int {
return companyList.size
}
override fun onBindViewHolder(p0: CompanyViewHolder, p1: Int) {
// p0.rbButton.text = this!!.companyList?.get(p1)?.Cmp_Name
p0.bindModel(companyList[p1])
}
inner class CompanyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val radioButton : RadioButton = itemView.findViewById(R.id.rbCompanyName)
fun bindModel(company: Company){
radioButton.text = company.Cmp_Name
radioButton.setOnClickListener(_ -> listner.onItemCompanyClick(company))
}
}
}
Также прочитайте это руководство об интерфейсе, надеюсь, это поможет.
Комментарии:
1. RadioButton.setOnClickListener(_ -> список). onItemCompanyClick(компания))
2. значение radiobutton передает следующее действие