【问题标题】:Android: (...)Fragment class and (...)ViewModel classAndroid: (...)Fragment 类和 (...)ViewModel 类
【发布时间】: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 相关的元素,如 TextViewButton 等,而 ViewModel 类旨在存储和以生命周期意识的方式管理与 UI 相关的数据
  • @Md.Asaduzzaman 非常感谢您的回答。但是,我还不清楚“以生命周期意识的方式与 UI 相关的数据”是什么意思。
  • 您的视图模型应该“准备”/“转换”用于填充小部件(例如 TextView)的“数据”。我放了双引号,因为任何业务逻辑都应该在您的视图模型之外委派。完成委托的工作后,视图模型应根据视图(片段)需要它们的方式准备结果。

标签: java android android-studio android-layout android-fragments


【解决方案1】:

fragment 是您的视图控制器,它控制视图,知道何时单击按钮,或文本放置在何处,或用户是否输入了编辑文本。

viewModel 负责应用程序的逻辑和数据,例如单击按钮时要做什么,或者 textView 应该显示什么。单击按钮时,片段会调用 viewModel 来执行正确的操作。 视图(您的片段)不应该能够更改视图模型中的属性,它应该能够观察它们,为此我们使用 LiveData。

它们都是称为 MVVM 架构的一部分,是 Model、View、View-Model 的缩写 查找 MVVM 了解更多信息

Guide to app architecture

另外,这个 udacity 课程可以帮到你很多

Developing Android Apps with Kotlin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多