Closed gabrielalbino closed 6 years ago
Pessoal, estamos com uma dúvida específica, mas bem trabalhosa! Vou especificar: Para atualizarmos uma variável (que, no nosso caso, é uma mutableList que adiciona e remove os players que curtiram a atividade) teríamos que passar pela FeedWorker novamente, para gravar os dados e deixá-lo pronto para impressão, entretanto, existe a função generateFeedMockData que inicializa todas as mutableList vazias, impedindo que esse dado seja armazenado. Nós temos ideias de criar duas funções na worker : Uma para o contexto de criação da cena (com as listas zeradas) e outra para o contexto de atualização da cena (quando um usuário curtir ou descurtir o challenge e a contagem for alterada), mas acreditamos não ser a solução mais efetiva. Vocês tem alguma outra sugestão?
Bom, realmente a dúvida de vocês é bastante pertinente. Bora lá...
Primeiro de tudo, sim, você terá que criar um segundo método, para curtir a atividade, tanto na Interactor, Worker, Presenter, View e Model... Inclusive sua Model vai ter que ser expandida pois a atual não suporta mais do que um tipo de Request, Response e ViewModel...
Outro ponto complicado, de fato é que da forma que fiz, não tem como alterar uma atividade em si... ela é gerada em tempo de execução e isso não é guardado em algum lugar para modificar depois...
Vamos ter que fazer algumas alterações de código. Mas isso é bom, acredito que vocês estão entendendo bem a arquitetura e agora chegou o ponto de expandirmos ela. Show!
Primeiro ponto é a nossa camada de Model. Dando uma dica muito na cara pra vocês, ela deverá ficar parecida com isso:
Segundo ponto, sua Business Logic agora terá 2 métodos a serem implementados pela Interactor:
Isso também acontecerá em todas as outras camadas da scene
O último ponto a ser considerado, inicialmente, é o nosso generateMockData lá na worker... Já ouviram falar de classe static? Termos que usar isso para que consigamos usar sempre as mesmas informações em memória, e possamos alterá-las ao longo do uso do app.
Inicialmente tentem entender o que escrevi aí nos comentários anteriores que irei fazer esse ajuste no Mock dos dados junto com o Miguel. Possivelmente amanhã pela manhã. O mais rápido possível!
@aleronupe @lorranyh Subi um commit contendo alterações de código para administrar os dados do Feed. Agora existem duas novas camadas:
Vocês agora, terão uma chave identificadora nas atividades do feed. Essa chave será usada para enviar ao Feed Manager, para que o mesmo consiga dar update na feed activity específica que vocês estão mexendo.
Deem uma olhada kkkk
Pessoal, tá sendo bastante complicado implementar essas duas funções pra cada coisa, porque a gente basicamente teria que dar um refresh na cena inteira só pra atualizar o número de curtidas do like, é essa mesma a intenção? Procuramos maneiras menos drásticas de implementar essa alteração sem ter que fazer toda essa implementação, mas tudo volta pra esse mesmo contexto.
De uma forma mais específica: a gente entende bem como adicionar um usuário que curtiu uma linha específica no array e como retornar esse tamanho em um valor na tela, a nossa dificuldade está sendo fazer isso nos lugares certos e nos jeitos certos da arquitetura (tanto que a versão atual que está no github faz justamente o que foi pedido, mas não está de acordo com a arquitetura proposta).
Estamos em dúvida em relação ao refresh, como podemos usá-lo em uma célula específica quando se clica no botão like?
E outra questão é sobre o Click Listener, qual o local apropriado para ele ficar na View
@lorranyh O reciclerview tem um método chamado getChildAt
Por exemplo, pra mudar a cor de uma linha da listview usa-se o comando
View v = listViewItems.getChildAt(position - listViewItems.getFirstVisiblePosition());
v.setBackgroundColor(Color.GREEN);
Dá pra usar essa mesma lógica pra mudara as labels da view
pode ser encontrado mais informações sobre isso aqui
Senhores, como conversei e expliquei para o @aleronupe hoje de dia/meio dia, vou detalhar aqui as dúvidas de vocês para ajudar a todos de um modo geral.
Primeira alteração a ser feita foi a criação de uma variável a nível de escopo de classe, para armazenar a Adapter da Recycler View, destacada em verde, para ser utilizada sempre que necessária. Imagem 1
Anteriormente a instanciação era feita nesse método, na hora de mostrar as informações após voltar da presenter: (Isso não deve mais ser feito aqui e dessa forma.) Imagem 2
Em conclusão a imagem anterior, aqui mostra a instanciação inicial da Adapter que agora, como em escopo de classe, deve ser feita no onCreate da View. Imagem 3
Aqui mostra como agora é usada a adapter no momento do retorno da presenter, ao contrário da forma que era feito antes, na imagem 2. Imagem 4
Se forem notar, essa imagem 4, em vermelho, também mostra a criação de um método OnClickListener, que será usado posteriormente na ViewHolder lá dentro da Adapter, mostrado na Imagem a seguir. Imagem 5
Antes, essa função era declarada direto no ViewHolder ao setar o evento de OnClickListener, da seguinte forma: (Agora deverá ser feito segundo a imagem 5) Imagem 6
Por fim, aqui é mostrado os métodos de Update, localizados dentro da Adapter, que é chamado nas funções implementadas da Presenter, como mostra a imagem 4 em verde Imagem 7
Acho que é isso... É necessário fazer na imagem 4, em vermelho, uma real função para quando o OnClickListener é chamado, como fazer a requisição pra interactor e assim por diante. E também é necessário, na imagem 7, implementar de fato uma função que consiga dar update em uma célula apenas. Inclusive, essa é a diferença entre os destaques vermelho e verde da imagem 7. Em vermelho o update é em todas as células da Recycler View, em verde é apenas uma célula específica.
Bom trabalho senhores!
Descrição
Essa issue deve adicionar um botão de curtir em cada atividade para poder dar feedbacks aos usuários sobre suas ações.
Critérios de Aceitação