Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ViewModel是否负责处理某个/a活动/片段的所有数据相关操作?_Java_Android_Android Jetpack_Android Viewmodel - Fatal编程技术网

Java ViewModel是否负责处理某个/a活动/片段的所有数据相关操作?

Java ViewModel是否负责处理某个/a活动/片段的所有数据相关操作?,java,android,android-jetpack,android-viewmodel,Java,Android,Android Jetpack,Android Viewmodel,我最近开始学习Android架构组件(LiveData,ViewModel和Navigation)。所以我创建了一个底部导航应用程序 我在这里放了一些示例代码,只是作为一个例子来讨论 SampleViewModel类:- public class DashboardViewModel extends ViewModel { private MutableLiveData<String> mText; public DashboardViewModel() {

我最近开始学习Android架构组件(
LiveData
ViewModel
Navigation
)。所以我创建了一个底部导航应用程序

我在这里放了一些示例代码,只是作为一个例子来讨论

SampleViewModel类:-

public class DashboardViewModel extends ViewModel {

    private MutableLiveData<String> mText;

    public DashboardViewModel() {
        mText = new MutableLiveData<>();
        mText.setValue("This is dashboard fragment");
    }

    public LiveData<String> getText() {
        return mText;
    }
}
公共类DashboardViewModel扩展了ViewModel{
私有可变livedata多行文字;
公共仪表板视图模型(){
mText=新的可变LiveData();
mText.setValue(“这是仪表板片段”);
}
公共LiveData getText(){
返回多行文字;
}
}
SampleFragmentClass:-

public class DashboardFragment extends Fragment {

    private DashboardViewModel dashboardViewModel;

    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        dashboardViewModel = ViewModelProviders.of(this).get(DashboardViewModel.class);
        View root = inflater.inflate(R.layout.fragment_dashboard, container, false);
        final TextView textView = root.findViewById(R.id.text_dashboard);
        dashboardViewModel.getText().observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                textView.setText(s);
            }
        });
        return root;
    }
}
公共类DashboardFragment扩展了片段{
专用仪表板视图模型仪表板视图模型;
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
dashboardViewModel=ViewModelProviders.of(this.get)(dashboardViewModel.class);
视图根=充气机。充气(R.layout.fragment_仪表板,容器,错误);
final TextView TextView=root.findviewbyd(R.id.text\u仪表板);
dashboardViewModel.getText().observe(这是新的观察者(){
@凌驾
公共void onChanged(@Nullable String s){
textView.setText;
}
});
返回根;
}
}
让我澄清一下,这些代码没有任何错误

我只想问几个问题:-

  • ViewModel
    是否完全负责加载将要加载的数据 由活动或片段使用

  • 如果我需要从服务器获取一些数据,我会调用API吗 从
    ViewModel
    还是活动本身

  • 如果我需要做一些基于上下文的操作,我会在 活动或片段。我有什么惯例或准则吗 应该在ViewModel中执行此操作吗


  • 所以,让我先说,这些问题真的很好问。我很乐意回答

  • 如果您遵循干净的体系结构,例如MVVM(模型、视图、视图模型),则是肯定的。因此,在这种体系结构中,您的视图实际上是虚拟的,不知道数据来自何处。他们唯一要做的就是在数据到来时显示数据。视图的唯一职责是显示数据,视图不做任何业务或网络逻辑。另一方面,ViewModel可以是一个真实的来源,并且与视图(片段、活动)具有一对一的关系,ViewModel具有生命周期意识,能够处理所有复杂和繁重的操作。在内部,视图模型可以依赖于存储库,而存储库在内部依赖于本地数据源和远程数据源。是的,ViewModel必须是视图(活动、片段)加载数据的唯一真实来源

  • 正如我所写的,ViewModel是唯一的真实来源,它应该是您可以从服务器或本地获取数据的来源

  • 这要看情况而定。若和UI相关的工作需要上下文,那个么可以在视图中完成。或者,如果是需要上下文的繁重计算,例如从本地数据库读取数千行,则可以在ViewModel中执行。要在ViewModel或更低级别中获取上下文引用,可以使用DI,例如dagger或koin,以避免样板代码

  • 下面的谷歌图表是查看MVVM架构高级图片的著名图表之一

    在这个小小的回答中,有太多的东西需要阐述。我认为,如果您查看MVVM体系结构,您将自动找到所有问题的明确答案

    谷歌为MVVM提供了一系列示例应用,您可以在下面的列表中找到


    所以,让我先说一下,这些问题真的很好问。我很乐意回答

  • 如果您遵循干净的体系结构,例如MVVM(模型、视图、视图模型),则是肯定的。因此,在这种体系结构中,您的视图实际上是虚拟的,不知道数据来自何处。他们唯一要做的就是在数据到来时显示数据。视图的唯一职责是显示数据,视图不做任何业务或网络逻辑。另一方面,ViewModel可以是一个真实的来源,并且与视图(片段、活动)具有一对一的关系,ViewModel具有生命周期意识,能够处理所有复杂和繁重的操作。在内部,视图模型可以依赖于存储库,而存储库在内部依赖于本地数据源和远程数据源。是的,ViewModel必须是视图(活动、片段)加载数据的唯一真实来源

  • 正如我所写的,ViewModel是唯一的真实来源,它应该是您可以从服务器或本地获取数据的来源

  • 这要看情况而定。若和UI相关的工作需要上下文,那个么可以在视图中完成。或者,如果是需要上下文的繁重计算,例如从本地数据库读取数千行,则可以在ViewModel中执行。要在ViewModel或更低级别中获取上下文引用,可以使用DI,例如dagger或koin,以避免样板代码

  • 下面的谷歌图表是查看MVVM架构高级图片的著名图表之一

    在这个小小的回答中,有太多的东西需要阐述。我认为,如果您查看MVVM体系结构,您将自动找到所有问题的明确答案

    谷歌为MVVM提供了一系列示例应用,您可以在下面的列表中找到