Questão nº 62

Questão de Tecnologia da Informação - Programação · FGV DPE-RS 2023 (nº 62)

FGV2023Técnico - Apoio Especializado (Programador)Tecnologia da Informação - Programação
Gabarito: Ever comentário ↓

Atualmente a plataforma Android permite a separação entre o fluxo funcional das telas e os estados do sistema, por meio de estruturas do tipo ViewModel, que funcionam com base no padrão Observer. Considere a classe apresentada a seguir.

```java
public class NomeModel extends ViewModel {
private final MutableLiveData<String> nome =
new MutableLiveData<>("");
public LiveData<String> getNome() { return nome; }
public void setNome(String valor) { nome.setValue(valor); }
}
```

A classe NomeModel caracteriza-se por:

Resposta comentada

Gabarito Alternativa E

O ViewModel é uma classe que armazena dados relacionados à interface do usuário de forma que sobrevivem a mudanças de configuração (como rotação de tela), e o LiveData é um tipo de dado que pode ser observado e que notifica automaticamente a interface quando seu valor muda, sendo consciente do ciclo de vida da tela.

(A) Incorreta: O método `getNome()` retorna um `LiveData<String>`, não um `MutableLiveData<String>`, o que impede a modificação direta do valor de `nome` a partir do exterior da classe, garantindo o encapsulamento.
(B) Incorreta: `ViewModel`s não devem ser instanciados diretamente com `new` em uma `Activity` se o objetivo é que sobrevivam a mudanças de configuração; eles são obtidos através de `ViewModelProvider` para serem gerenciados pelo framework Android.
(C) Incorreta: O modificador `final` em `nome` significa que a referência ao objeto `MutableLiveData` não pode ser alterada, mas o conteúdo (o valor `String` dentro do `MutableLiveData`) pode ser modificado através de métodos como `setValue()`.
(D) Incorreta: Esta é a armadilha. O método `getNome()` retorna um `LiveData<String>`, que não possui um método `setValue()` público. Apenas `MutableLiveData` tem `setValue()`. Isso é feito intencionalmente para que a `Activity` (ou `Fragment`) não possa alterar diretamente o estado, mas apenas observá-lo. As alterações devem ocorrer através dos métodos públicos do `ViewModel`, como `setNome()`.
(E) Correta: Para que a interface do usuário (UI) seja atualizada automaticamente quando o valor de `nome` mudar, é necessário "observar" o `LiveData` retornado por `getNome()`. Isso é feito chamando `getNome().observe(lifecycleOwner, observer)`, onde `lifecycleOwner` é a `Activity` ou `Fragment` e `observer` é um lambda que define como a UI deve reagir à mudança do valor.

Fonte: FGV DPE-RS 2023 Técnico - Apoio Especializado (Programador) (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho