Мне было интересно, можно ли передать данные String, объявленные в классе Activity, и передать данные String в класс ViewModel, а затем передать данные в класс Fragment.
Класс ViewModel
class TimeTableViewModel extends ViewModel {
private MutableLiveData<String> start_time_str = new MutableLiveData<>();
void send_StartTime(String start_Time){
start_time_str.setValue(start_Time);
}
LiveData<String> get_StartTime(){
return start_time_str;
}}
В классе ViewModel у меня есть MutableLiveData<String> start_time_str
, и он был инициализирован как new MutableLiveData<>();
Я хотел бы использовать функцию void send_StartTime(String start_Time)
в классе Activity, чтобы установить значение аргумента String start_Time
и вызвать start_time_str
в классе Fragment.
Класс активности
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case android.R.id.home:
finish();
break;
case R.id.add_schedule_save:
String start_time_str = startTime.getText().toString();
Intent intent_restart0 = new Intent(TimeTable_Add_New_Schedule.this, MainActivity.class);
startActivity(intent_restart0);
TimeTableViewModel timeTableViewModel = new TimeTableViewModel();
timeTableViewModel.send_StartTime(start_time_str);
Toast.makeText(this,""+start_time_str,Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
Класс фрагмента
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TimeTableViewModel timeTableViewModel = new TimeTableViewModel();
timeTableViewModel.get_StartTime().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String s) {
mon_textView_11.setText(s);
}
});
}
В классе Fragment я вызываю функцию get_StartTime()
, чтобы получить start_time_str
и установить значение String для моего TextView. Я думаю, что start_time_str
был успешно установлен функцией timeTableViewModel.send_StartTime(start_time_str);
в классе активности, потому что Toast.maketext работает как шарм. Однако TextView ничего не отображается. Я проверил, что цвет текста не белый, поэтому при правильном вызове строкового значения оно должно появиться на экране. Если у вас есть какие-либо предложения, я хотел бы услышать ваш совет. Большое тебе спасибо.