You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Filter仅匹配章节名才返回结果,低层级匹配失效问题

问题修复:Filter无法匹配Section/SubSection段落内容的问题

当前代码存在两个核心问题导致无法正确匹配Section或SubSection下的段落内容:

  1. 未检查Section自身的段落列表:原代码只判断了Section的名称和SubSection,忽略了Section直接包含的paragraphList和cleanedParagraphs。
  2. 空列表处理不当:使用?.any()后直接与true比较,当列表为null时会返回null,而null == true结果为false,可能导致合法匹配被忽略。

以下是修复后的完整Filter代码:

override fun getFilter(): Filter {
    return object : Filter() {
        override fun performFiltering(constraint: CharSequence?): FilterResults {
            val query = constraint.toString().lowercase()
            searchTextQuery = query
            val filteredData = if (query.isEmpty()) {
                originalList
            } else {
                originalList.filter { chapter ->
                    // 匹配章节名称
                    chapter.name.lowercase().contains(query) ||
                    // 检查章节下的所有Section
                    chapter.sectionList?.any { section ->
                        // 匹配Section名称
                        section.name.lowercase().contains(query) ||
                        // 匹配Section直接包含的段落
                        section.paragraphList?.any { paragraph ->
                            paragraph.name.lowercase().contains(query)
                        } ?: false ||
                        // 匹配Section的cleanedParagraphs
                        section.cleanedParagraphs?.any { paragraph ->
                            paragraph.name.lowercase().contains(query)
                        } ?: false ||
                        // 检查Section下的所有SubSection
                        section.subsectionList?.any { subsection ->
                            // 匹配SubSection名称
                            subsection.name.lowercase().contains(query) ||
                            // 匹配SubSection包含的段落
                            subsection.paragraphList?.any { paragraph ->
                                paragraph.name.lowercase().contains(query)
                            } ?: false ||
                            // 匹配SubSection的cleanedParagraphs
                            subsection.cleanedParagraphs?.any { paragraph ->
                                paragraph.name.lowercase().contains(query)
                            } ?: false
                        } ?: false
                    } ?: false
                }
            }

            val results = FilterResults()
            results.values = filteredData
            return results
        }

        override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
            if (results != null && results.values is List<*>) {
                filteredList = results.values as List<Chapter>
                notifyDataSetChanged()
            }
        }
    }
}

关键修复点说明:

  • 新增Section段落检查:在Section的判断逻辑中,添加了对paragraphList和cleanedParagraphs的匹配检查。
  • 新增SubSection的cleanedParagraphs检查:补充了对SubSection下cleanedParagraphs的匹配判断。
  • 空列表安全处理:使用?: false替代== true,当列表为null时自动视为不匹配,避免空值比较导致的逻辑错误。
  • 层级覆盖完整:现在会依次检查章节名、Section名、Section段落、SubSection名、SubSection段落的所有匹配可能性。

内容的提问来源于stack exchange,提问作者Michael Phandera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:47:05