Как в Kotlin использовать элемент recyclerview в качестве кнопки
У меня есть код на java:
ArrayList<MainList> main_lists;
....
public class MovieViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MovieViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.desc);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Context context = v.getContext();
Intent intent = new Intent(context, GenresActivity.class);
intent.putExtra("main_key", main_lists.get(position).getMovie());
context.startActivity(intent);
}
});
}
}
Пробую переписать его на Kotlin
val mainList = ArrayList<MainData>()
.....
class MainViewHolder(item: View): RecyclerView.ViewHolder(item) {
val binding = MainItemBinding.bind(item)
fun bind(mainData: MainData) = with(binding){
mainText.text = mainData.name
}
item.setOnClickListener(
object : View.OnClickListener {
override fun onClick(v: View) {
val position: Int = getAdapterPosition()
val context = v.context
val intent = Intent(context, GenresActivity::class.java)
intent.putExtra("main_key", mainList.get(position).getMovie())
context.startActivity(intent)
}
})
}
Возникают следующие проблемы:
метод getAdapterPosition() выделяется красным, MainViewHolder не видет список mainList
Ответы (1 шт):
Автор решения: Android Junior
→ Ссылка
Хороший способ это имплементировать View.OnClickListener и реализовать метод onClick. Это и будет нажатие на элемент
inner class ContactHolder(private val binding: ContactItemBinding) : RecyclerView.ViewHolder(binding.root), View.OnClickListener {
private var nameTextView: TextView
private var latestMessage: TextView
private lateinit var _staffs: Staffs
init {
itemView.setOnClickListener(this)
nameTextView = itemView.findViewById(R.id.contact_name)
latestMessage = itemView.findViewById(R.id.latest_message)
}
fun bindMessage(staffs: Staffs) {
binding.setVariable(BR.staffs, staffs)
_staffs = staffs
}
override fun onClick(v: View?) {
var bundle = Bundle()
bundle.putSerializable("user", _staffs)
v?.findNavController()?.navigate(R.id.action_nav_contact_list_to_nav_chat, bundle)
}
}
По поводу видимости. А зачем?