android adapter <*> - How to bind view in RecyclerView.ViewHolder with kotlin

1 Answers

Just make sure you have apply plugin: 'kotlin-android-extensions' in your application gradle file (not your root gradle) and then just use the Convert Java file to Kotlin file shortcut. Remove the Butterknife code and directly reference itemView.tv_title in your ViewHolder object like so.

Edit: I've changed the code to take advantage of Kotlin's synthetic view caching, you don't need to set a variable equal to a view like val title = itemView.tv_title in order to gain those benefits


class RoomAdapter : RecyclerView.Adapter<RoomAdapter.ViewHolder>() {

    private var listener: OnItemClickListener? = null
    private var rooms: List<LocationBean>? = null

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bind(room: Room) {
            itemView.tv_title.text = room.getLocation()


    fun setData(rooms: List<LocationBean>) {
        this.rooms = rooms

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_first_select, parent, false)
        return ViewHolder(view)

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        rooms?.get(position)?.let { room ->

        holder.itemView.setOnClickListener { v ->
            listener?.onItemClickListener(v, holder.layoutPosition)

    override fun getItemCount(): Int {
        return rooms?.size ?: 0

    fun setOnItemClickListener(listener: OnItemClickListener) {
        this.listener = listener

    interface OnItemClickListener {
        fun onItemClickListener(v: View, pos: Int)

example get from

What makes me puzzled is how to bind view in Recycleler.ViewHolder. This is my simple adapter and how to Convert it to kotlin use kotlin-android-extensions without ButterKnife?

public class RoomAdapter extends RecyclerView.Adapter<ViewHolder> {

  private OnItemClickListener mListener;
  private List<LocationBean> mRooms;

  static class ViewHolder extends RecyclerView.ViewHolder {

  TextView tvTitle;

  public ViewHolder(View itemView) {
   ButterKnife.bind(this, itemView);

  public void setData(List<LocationBean> rooms) {
   mRooms = rooms;

  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
      .inflate(R.layout.item_first_select, parent, false);
    return new ViewHolder(view);

  public void onBindViewHolder(final ViewHolder holder, int position) {

  holder.itemView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
      mListener.onItemClickListener(v, holder.getLayoutPosition());

  public int getItemCount() {
    return mRooms == null ? 0 : mRooms.size();

  public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;

  public interface OnItemClickListener {
    void onItemClickListener(View v, int pos);