Я предложу вам использовать LiveData
с ViewModel
в этом случае
Например:
Сначала создайте ViewModel
класс
YourViewModel. java:
//initialize this mutableLiveData first
public MutableLiveData<String> parameterA = new MutableLiveData<>("");
private void setParameterA(String myValue){
parameterA.setValue(myValue);
}
Затем в YourActivity. java, получите ViewModel
класс
YourViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
... all other thing
viewModel = ViewModelProviders.of(this).get(YourViewModel.class);
}
//then whatever the situation in activity,u want to update parameterA
private void SomeSituation() {
//update the parameterA
...
viewModel.setParameterA("Your value Here")
}
Затем в своем фрагменте обратите внимание на значение параметра A
Ваш фрагмент:
// in onCreate() or onViewCreated()
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//get the same viewModel
viewModel = ViewModelProviders.of(requireActivity()).get(YourViewModel.class);
viewModel.parameterA.observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String parameterA) {
// anything changes on parameterA
// do whatever you want with the value S
}
});
}
Таким образом, по методу выше, всякий раз, когда есть изменения parameterA
в действии фрагмент получит обновление асинхронным, затем вы можете делать все, что захотите, со значением обновления в разделе onChanged()
.
Как вы упомянули в комментарии:
получите файлы (считывает из базы данных), переменные, массивы
LiveData
могут также использоваться для пользовательского класса Model, например, MutableLiveData<List<Post>>
, поэтому, когда вы setValue()
в activity
, ваш фрагмент может получить значение асинхронно в onChanged()
.
Перед использованием LiveData
, вам необходимо Добавить компоненты в ваш проект
Это Android M В архитектуре VVM вы можете увидеть do c здесь , пример здесь