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!