Позвольте мне сначала описать мое приложение на поверхностном уровне.
Приложение имеет панель навигации, которая была создана Android с двумя представлениями по умолчанию (новый контроллер навигации).
а. HomeView
б. HistoryView
Я создал модели просмотра для обмена данными
a. DataViewModel
Проблемы:
Когда я переключаюсь на HistoryView и пытаюсь изменить сообщение, оно никогда не попадает в HomeView.
Когда я переключаюсь обратно на HomeView, я вижу последнее измененное значение в консоли.
@ james04 упоминается, чтобы добавить код для справки - вот он является -
MainActivity -
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_history)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
HomeFragment -
// @onCreateView
dataViewModel = new ViewModelProvider(getActivity()).get(DataViewModel.class);
// @onViewCreated
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
dataViewModel.getMessage().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String s) {
Log.d("MESSAGES","Labels - > " + s);
}
});
}
HistoryFragment -
// @onCreateView
dataViewModel = new ViewModelProvider(getActivity()).get(DataViewModel.class);
// @onViewCreated
setMessages.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int id) {
switch (id){
case R.id.apple:
dataViewModel.setMessage("Apple");
break;
case R.id.banana:
dataViewModel.setMessage("Banana");
break;
}
}
});