ciao!

specifico kotlin, ma in verità ho lo stesso problema in java.
ho una listview con un custom adapter:
codice:
package com.mp.mpbook

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap


class BookAdapter(
    private val context: Context,
    private val dataList: ArrayList<HashMap<String, String>>
) : BaseAdapter() {

    val inflater: LayoutInflater =
        this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater;
    var tempNameVersionList = ArrayList(dataList)

    override fun getCount(): Int {
        return dataList.size;
    }

    override fun getItem(position: Int): Int {
        return position;
    }

    override fun getItemId(position: Int): Long {
        return position.toLong();
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        var dataitem = dataList[position];

        val rowView = inflater.inflate(R.layout.list_row, parent, false);
        rowView.findViewById<TextView>(R.id.txtTitle).text = dataitem.get("title");

        rowView.tag = position;
        return rowView;
    }

    fun filter(text: String?) {
        val text = text!!.toLowerCase(Locale.getDefault());
        dataList.clear();

        if (text.length == 0) {
            dataList.addAll(tempNameVersionList);
        } else {
            for (i in 0..tempNameVersionList.size - 1) {
                if (tempNameVersionList.get(i).get("title")!!.toLowerCase(Locale.getDefault())
                        .contains(text)
                ) {
                    dataList.add(tempNameVersionList.get(i));
                }
            }
        }
        notifyDataSetChanged();
    }
}
quando clicco su una voce, vorrei prendere l'intero oggetto Book dall'adapter.
ho provato così vedendo diversi tutorial:
codice:
val listView = findViewById<ListView>(R.id.listView);
listView.setOnItemClickListener { parent, view, position, id ->
    val b = parent.getItemAtPosition(position) as Book;
}
ma ottengo questo errore:
codice:
java.lang.ClassCastException: java.lang.Long cannot be cast to com.mp.mpbook.Book
        at com.mp.mpbook.MainActivity$onCreate$2.onItemClick(MainActivity.kt:42)
        at android.widget.AdapterView.performItemClick(AdapterView.java:318)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1201)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3178)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

l'errore l'ho capito, ma non ho capito se e come risolvere il problema!