diff --git a/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/data/Schedule.kt b/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/data/Schedule.kt index d155de1..a51745f 100644 --- a/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/data/Schedule.kt +++ b/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/data/Schedule.kt @@ -41,10 +41,6 @@ class Schedule { || this.talkDescription.contains(keyword, ignoreCase = true) || this.speakerNames.any { it.contains(keyword, ignoreCase = true) } } - - override fun toString(): String { - return talkTitle - } } data class ScheduleDetail( diff --git a/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/views/search/ScheduleSearchAdapter.kt b/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/views/search/ScheduleSearchAdapter.kt index 238f27d..5c32a11 100644 --- a/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/views/search/ScheduleSearchAdapter.kt +++ b/Droidcon-Boston/app/src/main/java/com/mentalmachines/droidcon_boston/views/search/ScheduleSearchAdapter.kt @@ -15,6 +15,8 @@ class ScheduleSearchAdapter( private val layoutRes: Int, private val scheduleRows: List ): ArrayAdapter(context, layoutRes, scheduleRows) { + private val suggestions: MutableList = mutableListOf() + private val tempItems: MutableList = scheduleRows.toMutableList() override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val view = convertView ?: LayoutInflater.from(context).inflate(layoutRes, parent, false) @@ -36,8 +38,14 @@ class ScheduleSearchAdapter( override fun getFilter(): Filter { return object : Filter() { override fun performFiltering(constraint: CharSequence?): FilterResults { - val suggestions = scheduleRows.filter { - it.containsKeyword(constraint?.toString().orEmpty()) + val keyword = constraint ?: return FilterResults() + + suggestions.clear() + + tempItems.forEach { + if (it.containsKeyword(keyword.toString())) { + suggestions.add(it) + } } return FilterResults().apply { @@ -47,16 +55,19 @@ class ScheduleSearchAdapter( } override fun publishResults(constraint: CharSequence?, results: FilterResults?) { + val tempValues = (results?.values as? List<*>) + ?.filterIsInstance(Schedule.ScheduleRow::class.java) + clear() - (results?.values as? List<*>) - ?.filterIsInstance(Schedule.ScheduleRow::class.java) - ?.forEach { - add(it) - } + tempValues?.forEach(this@ScheduleSearchAdapter::add) notifyDataSetChanged() } + + override fun convertResultToString(resultValue: Any?): CharSequence { + return (resultValue as? Schedule.ScheduleRow)?.talkTitle.toString() + } } } } \ No newline at end of file