【发布时间】:2020-05-07 07:35:28
【问题描述】:
我对 android 环境比较陌生。我有一个从模板创建的项目。在这个项目中,我做了很多片段。为每个片段创建了一个名为 [...]Fragment.java 和 [...]ViewModel.java 的类。各个班级负责什么。什么进入第一个,什么进入第二个?
头等舱:
public class HomeFragment extends Fragment {
private HomeViewModel homeViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel =
ViewModelProviders.of(this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, false);
final TextView textView = root.findViewById(R.id.text_home);
homeViewModel.getText().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}
二等:
public class HomeViewModel extends ViewModel {
private MutableLiveData<String> mText;
public HomeViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is home fragment");
}
public LiveData<String> getText() {
return mText;
}
}
【问题讨论】:
-
Fragment 类负责保存与 UI 相关的元素,如
TextView、Button等,而 ViewModel 类旨在存储和以生命周期意识的方式管理与 UI 相关的数据 -
@Md.Asaduzzaman 非常感谢您的回答。但是,我还不清楚“以生命周期意识的方式与 UI 相关的数据”是什么意思。
-
您的视图模型应该“准备”/“转换”用于填充小部件(例如 TextView)的“数据”。我放了双引号,因为任何业务逻辑都应该在您的视图模型之外委派。完成委托的工作后,视图模型应根据视图(片段)需要它们的方式准备结果。
标签: java android android-studio android-layout android-fragments