【发布时间】:2020-03-27 11:53:04
【问题描述】:
我想知道是否可以传递一个在 Activity 类中声明的 String 数据并将 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<>();
我想在Activity类中使用void send_StartTime(String start_Time)函数来设置参数String start_Time的值并在Fragment类中调用start_time_str。
活动类
@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); 在Activity 类中的功能,因为Toast.maketext 就像一个魅力。 但是 TextView 没有显示任何内容。我已经测试过文本颜色不是白色,因此如果正确调用了字符串值,它应该会出现在屏幕上。 如果您有任何建议,我很想听听您的建议。
非常感谢。
【问题讨论】:
标签: android mvvm viewmodel android-livedata mutablelivedata