terça-feira, 20 de junho de 2017

The CodFish

Estou programando em java para Android fazendo um novo aplicativo (TOP SECRET) que possui uma lista com N itens. No Android isso se chama ListView, GridView ou ViewPager (dentre outros). No meu caso é um ViewPager, onde cada item da lista pode conter um layout com um monte de componentes (botões, texto e outros). Estes componentes podem ser adicionados pelo usuário, criando mais itens na lista. Parece fácil: usuário clica em um botão e adiciona mais um item. Refresh na lista e tudo beleza. E depois de uns 40 minutos para colocar tudo vindo de um banco de dados, colocar o sistema para inserir: tudo funcionou bonito! Até que encontrei um BUG! Dava erro APENAS quando o usuário adicionava o primeiro item na lista. Não aparecia nada! Pior ainda. Se o usuário adicionasse um monte de itens logo de cara, não dava refresh na lista e nada aparecia. Era como se nada tivesse feito... Fóruns, stackoverflow, google, doideira em russo, e nada de descobrir porque isso acontecia. Até que encontro uma pergunta no Stack Overflow dando um monte de sugestões para resolver algo semelhante a este problema. Fiz tudo. Nada deu certo... Depois de horas vagando na internet encontrei um código semelhante ao meu onde o maluco colocou um comentário: nunca coloque ZERO nesta variável, que define a quantidade de componentes da lista. Nunca coloque ZERO, escrevia o programador assustado em maiúsculas. Aparentemente, se o número de itens for ZERO, em um dado momento, o componente não atualiza mais nada, mesmo que você adicione itens. Só se você destruir tudo e reconstruir. Toda a tela! Solução bacalhau: passa a ter um primeiro item fixo que será a "capa", "título" ou "cabeçalho" dos itens. Ninguém tinha pensando nisso? E se encher o saco coloco este item com ZERO de largura e altura! Gênio! Chamo este item de codFish...