Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como implementar o padrão Observer no Android

O padrão de projeto Observer é amplamente utilizado em desenvolvimento de software para permitir que um objeto (o "observado") notifique automaticamente uma lista de objetos dependentes (os "observadores") sobre qualquer mudança de estado. Este padrão é especialmente útil em aplicações que requerem atualização em tempo real, como interfaces gráficas de usuário (GUIs) e sistemas de notificação.

No ambiente Android, o padrão Observer pode ser implementado de várias maneiras, utilizando classes e interfaces nativas da plataforma. Uma das abordagens mais comuns é através do uso de LiveData e Observer da biblioteca Android Architecture Components. Esta combinação facilita a criação de interfaces reativas e atualizações automáticas de UI em resposta a mudanças de dados.

Exemplos:

  1. Implementação básica com LiveData e Observer:
// ViewModel class
public class MyViewModel extends ViewModel {
    private MutableLiveData<String> liveData;

    public MyViewModel() {
        liveData = new MutableLiveData<>();
    }

    public LiveData<String> getLiveData() {
        return liveData;
    }

    public void updateData(String data) {
        liveData.setValue(data);
    }
}

// Activity class
public class MainActivity extends AppCompatActivity {
    private MyViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewModel = new ViewModelProvider(this).get(MyViewModel.class);
        final TextView textView = findViewById(R.id.textView);

        viewModel.getLiveData().observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                textView.setText(s);
            }
        });

        // Simulate data update
        viewModel.updateData("Hello, Observer Pattern!");
    }
}
  1. Implementação com múltiplos observadores:
// ViewModel class
public class SharedViewModel extends ViewModel {
    private MutableLiveData<Integer> counter;

    public SharedViewModel() {
        counter = new MutableLiveData<>();
        counter.setValue(0);
    }

    public LiveData<Integer> getCounter() {
        return counter;
    }

    public void incrementCounter() {
        if (counter.getValue() != null) {
            counter.setValue(counter.getValue() + 1);
        }
    }
}

// First Fragment
public class FirstFragment extends Fragment {
    private SharedViewModel viewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
        final TextView counterTextView = view.findViewById(R.id.counterTextView);

        viewModel.getCounter().observe(getViewLifecycleOwner(), new Observer<Integer>() {
            @Override
            public void onChanged(@Nullable Integer count) {
                counterTextView.setText(String.valueOf(count));
            }
        });

        return view;
    }
}

// Second Fragment
public class SecondFragment extends Fragment {
    private SharedViewModel viewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_second, container, false);
        viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
        Button incrementButton = view.findViewById(R.id.incrementButton);

        incrementButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModel.incrementCounter();
            }
        });

        return view;
    }
}

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.