2
respostas

Collapse/Expand do ExpandableListView com comportamento estranho

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;
    }
2 respostas

Fala ai Lucas, tudo bem ?

Um chute que tenho é que talvez ele só execute isso se estiver na tela, caso não esteja ele acaba não alterando esse cenário.

Eu mexi bem pouco com ExpandableListView para poder falar algo sobre :(

Tudo bem, Matheus. E com vc?

Sim, tava observando exatamente a mesma coisa. Mas ainda não achei uma solução pra isso. Se tiver alguma idéia de como eu posso resolver isso, vai ajudar bastante