I teach Kotlin, I want to implement an interface in the adapter for RecyclerView , through which I will return some value to the activation. Nicherta does not work, please suggest on some issues (at the end).
In Java, I would write it like this (interface: OnAnimalClickListener ):
Adapter:
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(); } } Activate:
contentAdapter.setOnAnimalClickListener(() -> //doSomething); What I write on the cotlin (the names are slightly different):
Adapter:
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) } } Activate:
(recycler_packs.adapter as PacksAdapter).onPackClickListener = PacksAdapter.OnPackClickListener() Questions:
1) Here, the code is not without reason:
override fun onClick(v: View?) { onPackClickListener. } The fact is that I do not see my onPackClickListener from the method, it is written that it is Unresolved . And why is that?
2) In activation, I get an error:
I just can not understand what they want from me?
