Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade
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:
// 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!");
}
}
// 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;
}
}