Criei um ExpandableListView para mostrar o resultado de uma pesquisa, que possui até 3 grupos, e só mostra os grupos que trouxerem resultados. Minha intenção era que todos os grupos exibidos aparecessem expandidos por default. Para o último tipo de busca (por letra), eu tento buscar todas as ocorrencias do que foi pesquisado, e seto o resultado numa textview que fica logo abaixo da textview do título da música. Mas ao expandir/minimizar o grupo, o app se comporta de maneira estranha, mostrando as ocorrencias do que foi pesquisado em algumas músicas, mas em outras não. Já debuguei o código, e vi que as ocorrencias são setadas em todas as músicas, porém, por algum motivo, em alguns casos não aparece. Alguém tem idéia do motivo pelo qual isso acontece?
Trecho do código onde são setadas as ocorrencias da palavra pesquisada:
if(searchedLineField != null){
if(groupPosition == listHeaders.size() - 1){
searchedLine = fitLyricsLine(lyric, searchedLine);
searchedLineField.setText(Html.fromHtml(searchedLine));
searchedLineField.setTextSize(sizes.getListLyricSize());
} else{
searchedLineField.setVisibility(View.GONE);
}
}
Método que formata a apresentação das ocorrencias:
private String fitLyricsLine(String[] lyric, String lyricsLine) {
for (String aLyric : lyric) {
if (aLyric.toLowerCase().contains(argument.toLowerCase())) {
String line = aLyric;
if (lyricsLine.isEmpty()) {
line = enlightenArgument(line);
lyricsLine = line;
} else {
line = enlightenArgument(line);
lyricsLine = lyricsLine + "<br>" + line;
}
}
}
return lyricsLine;
}
Método responsável por destacar a palavra pesquisada:
private String enlightenArgument(String line) {
int initialPosition = line.toLowerCase().indexOf(argument.toLowerCase());
int finalPosition = initialPosition + argument.length();
line = line.substring(0, initialPosition ) + "<font color=#3C01FC>" + line.substring(initialPosition, finalPosition) + "</font>" + line.substring(finalPosition, line.length());
return line;
}