Изучая Kotlin, я хочу реализовать интерфейс на адаптере, который будет уведомлять об активности при нажатии на элемент.Ничего не работает, мне нужна ваша помощь.
Если я пишу Java, я делаю это следующим образом: (интерфейс: OnAnimalClickListener
):
Адаптер:
public class PackContentAdapter extends RecyclerView.Adapter<PackContentAdapter.ViewHolder> {
private Context context;
private OnAnimalClickListener onAnimalClickListener;
...
void setOnAnimalClickListener(OnAnimalClickListener onAnimalClickListener) {
this.onAnimalClickListener = onAnimalClickListener;
}
...
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.bind(item);
}
...
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
...
ViewHolder(View view) {
super(view);
...
}
void bind(Item item) {
...
}
@Override
public void onClick(View v) {
onAnimalClickListener.onAnimalClicked();
}
}
public interface OnAnimalClickListener {
void onAnimalClicked();
}
}
Активность:
contentAdapter.setOnAnimalClickListener(() -> //doSomething);
Это я пишу на Kotlin (имена изменены):
Адаптер:
class PacksAdapter : RecyclerView.Adapter<PacksAdapter.ViewHolder>() {
var onPackClickListener: OnPackClickListener? = null
set(value) {
field = value
}
var packList: ArrayList<Animal> = ArrayList()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.cell_animalpack_4, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(packList[0], context)
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view),View.OnClickListener {
...
fun bind(pack: AnimalPackFull, context: Context) {
...
}
override fun onClick(v: View?) {
onPackClickListener.
}
}
interface OnPackClickListener {
fun onPackClicked(packId: Int)
}
}
Активность:
(recycler_packs.adapter as PacksAdapter).onPackClickListener = PacksAdapter.OnPackClickListener()
Myвопросы:
1) Я специально не завершаю свой код здесь:
override fun onClick(v: View?) {
onPackClickListener.
}
Из-за того, что я не вижу свой onPackClickListener
от onClick, IDE пишет, что он Unresolved
,Почему?
2) Я получил ошибку об активности:
Я могу понять, что я делаю не так?