Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 androidmvvm设计模式示例_Java_Android_Design Patterns_Mvvm_Dependency Injection - Fatal编程技术网

Java androidmvvm设计模式示例

Java androidmvvm设计模式示例,java,android,design-patterns,mvvm,dependency-injection,Java,Android,Design Patterns,Mvvm,Dependency Injection,我目前做了很多WPF开发,并开始创建一些基本的Android应用程序。创建WPF应用程序时,我经常使用MVVM,通常使用Prism,我想知道是否有适用于Android平台的MVVM示例?我有时使用ViewModels将纯模型转换为模型应显示的形式,但是,MVVM ISM的大部分来源于这样一个事实:WPF框架中内置了这个海量数据绑定引擎。您可能无法在Android世界中找到WPF+MVVM的确切体验,但您可以采用许多好的概念并实现它们(只是不需要自动数据绑定) 首先,只需创建ViewModels。

我目前做了很多WPF开发,并开始创建一些基本的Android应用程序。创建WPF应用程序时,我经常使用MVVM,通常使用Prism,我想知道是否有适用于Android平台的MVVM示例?

我有时使用ViewModels将纯模型转换为模型应显示的形式,但是,MVVM ISM的大部分来源于这样一个事实:WPF框架中内置了这个海量数据绑定引擎。您可能无法在Android世界中找到WPF+MVVM的确切体验,但您可以采用许多好的概念并实现它们(只是不需要自动数据绑定)

首先,只需创建ViewModels。您不需要像Prism这样的框架来创建ViewModels。您没有所有的PropertyChanged通知和类似的东西,但是您可以将数据转换为可以更好地被UI使用的信息,从而清理代码。这方面的一个完美例子是我使用了一个滑块式的UI。Android的SeekBar始终是基于零的,并且使用整数值,因此您不能绑定到模型中的最小值、最大值和增量值。您可以使用ViewModel将最小/最大值转换为SeekBar可以使用的基于0的等效值…仅举一个例子。基于值范围显示颜色和大小也是如此。对我来说,这就是ViewModels的全部内容

至于依赖性注射,请查看RoboGuice。我刚开始在我的一个项目中使用它,之前我在一个本地会议上看到了它的创建者的演示,它可能正是你想要的


正在开发一个相对较新的框架,允许将视图绑定到名为的ViewModels。使用此框架,您可以启动MVVM。这个框架还需要一些工作,但它是一个很好的起点。

我是的开发者。正如@Brentley所说,这是一个非常新的项目,但我确实希望得到更多的关注和经验,以便能够改进。回到你的问题,我已经写了一些关于使用android绑定的MVVM的简单介绍/教程:


潜在采用者也请在

上注册,有一个项目名为

它是由Stuart Lodge开发的免费、开源和精心设计的MVVM框架

他为Android和iPhone实现了绑定,所以现在MVVM也适用于所有这些平台


对我来说,它是最好的MVVM框架之一——它真正展示了MVVM的强大功能。使用它,您可以为不同的平台(WP7、Android、iPhone、WinRT)编写一个代码(模型层和viewmodel层),只需更改应用程序UI(视图层)。

只需将其作为参考发布给可能感兴趣的其他人即可。我是Android平台数据绑定表示模型框架的贡献者。这是出于同样目的的另一个框架。除了帮助项目结构外,RoboBind的一个主要重点是使使用普通JUnit测试而不是android单元测试来测试android应用程序成为可能,因为单元测试对于保证项目质量非常重要,但android单元测试需要很长时间才能运行,并且使单元测试变得有些不切实际。它本身有300多个JUnit测试来确保它的质量。源于Microsoft,是Martin Fowler引入的表示模型设计模式的一个专门化。其他选择:Android Binding、Bindroid和MvvmCross。

库是将数据连接到用户界面元素的工具。创建布局文件并标记每个项目后,一行代码将所有数据绑定到用户界面元素,并为其他任务节省时间。

现在有一个官方的Android数据绑定插件,尽管它目前仍处于测试阶段。在Android Studio的beta版中,也正在为绑定语法添加工具支持

有关更多信息,请参见下文:


最近,我实现了MVVM模式,用于构建带有数据绑定库的Android应用程序。在这里,您可以阅读我所做工作的详细回顾和代码片段:

要了解有关该主题的更多信息,您还可以查看以下应用程序示例:


这里有一些使用搜索和列表屏幕的可视化示例。

您可以按照以下步骤进行片段数据绑定:我在示例中发布了design和java类,用于绑定片段中的数据

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    <data class=".UserBinding">
        <variable  name="user" type="com.darxstudios.databind.example.User"/>
    </data>
 <RelativeLayout

    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment"
    >



        <TextView android:text='@{user.firstName+"  "+user.lastName}' android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:id="@+id/textView" />

     <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="New Button"
         android:id="@+id/button"
         android:layout_below="@+id/textView"
         android:layout_toEndOf="@+id/textView"
         android:layout_marginStart="40dp"
         android:layout_marginTop="160dp" />

 </RelativeLayout>
</layout>


    public class MainActivityFragment extends Fragment {

    public MainActivityFragment() {
    }

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

        final User user = new User();
        user.setFirstName("Michael");
        user.setLastName("Cameron");
        UserBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_main, container, false);
        binding.setUser(user);

        View view = binding.getRoot();

        final Button button = (Button) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                user.setFirstName("@Darx");
                user.setLastName("Val");
            }
        });

        return view;
    }

}

公共类MainActivityFragment扩展了片段{
公共维护活动片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
最终用户=新用户();
user.setFirstName(“Michael”);
user.setLastName(“Cameron”);
UserBinding=DataBindingUtil.inflate(充气机,R.layout.fragment_main,容器,false);
binding.setUser(用户);
View=binding.getRoot();
final Button=(Button)view.findViewById(R.id.Button);
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
user.setFirstName(“@Darx”);
user.setLastName(“Val”);
}
});
返回视图;
}
}

我发现这个关于使用Android数据绑定库的MVVM的应用程序系列非常不错。在这个系列中,他从简单的示例到recyclerview进行了解释,并且还进行了测试


您也可以尝试一下。

几年前我也做了一些WPF和WP开发,Prism和MVVM Light Toolkit通常用于构建WP应用程序,我认为它非常适合windows phone应用程序架构!因此,我使用我以前的WP开发经验,然后模仿创建Android MVVM Light Toolkit(一个帮助
data: It contains all the data accessing and manipulating components.
di: Dependency providing classes using Dagger2.
ui: View classes along with their corresponding ViewModel.
utils: Utility classes.