Android MVVMdevise模式示例
我目前做了很多的WPF开发,并开始创build一些基本的Android应用程序。 在创buildWPF应用程序时,我经常使用MVVM,通常使用Prism,并想知道是否有Android平台的MVVM的例子?
我是Android绑定的开发者。 就像@Brentley说的那样,这是一个非常新的项目,但我希望能获得更多的嗡嗡声和经验,以便能够改进。 回到你的问题,我用MVVM写了一些简单的介绍/教程与android-binding:
- Android MVVM教程(用android绑定)
- Android绑定介绍(codeproject)
- Android绑定中的模型validation(codeproject)
- Wiki在项目主页
潜在的采用者也请在项目讨论组上注册。
我有时使用ViewModel从纯模型转换到模型应该显示的内容,但是这么多的MVVM主要来自这样一个事实,即你拥有这个庞大的数据绑定引擎。 您可能无法在Android世界中findWPF + MVVM的确切体验,但您可以采取许多好的概念并实现它们(只是没有自动数据绑定的东西)。
首先,创buildViewModels。 你不需要像Prism这样的框架来创buildViewModels。 你没有所有的PropertyChanged通知和类似的东西,但是你可以把你的数据转换成你的UI可以更好地使用的信息,这将清理你的代码。 这是一个完美的例子,我用滑块沉重的用户界面。 Android的SeekBar总是基于零,并且使用整数值,所以你不能绑定到最小值,最大值,并增加模型的值。 您可以使用ViewModel将您的最小/最大值转换为您的SeekBar可以使用的基于0的等价物…只是一个示例。 基于值范围显示颜色和大小也是一样。对我来说,这就是ViewModel的全部内容。
至于dependency injection的东西,看看RoboGuice。 我刚开始在本地的Meetup上看到创build者的演示文稿后,就开始在我的一个项目中使用这个function,这可能就是您要找的内容。
Google代码上的RoboGuice
RoboGuice谷歌集团
现在有一个官方的Android数据绑定插件,尽pipe目前它还处于testing阶段。 也正在做一些工作来为Android Studiotesting版中的绑定语法添加工具支持。
请参阅下面的详细信息
有一个相对较新的框架正在开发,允许视图绑定到ViewModels称为android绑定 。 使用这个框架和RoboGuice你可以得到你的MVVM。 框架仍然需要一些工作,但这是一个很好的起点。
Android数据绑定库是一种将数据连接到用户界面元素的工具。 一旦创build布局文件并对每个项目进行标记,一行代码将所有数据绑定到用户界面元素,并节省您的时间用于其他任务。
最近我已经实现了MVVM模式来构build一个带有数据绑定库的Android应用程序。 在这里,您可以阅读我所做的工作和代码片段的详细评论: http : //cases.azoft.com/mvvm-android-data-binding/
要了解有关该主题的更多信息,您还可以查看这些应用示例: https : //github.com/ivacf/archi
有search和列表屏幕的工作视觉例子。
几年前我也做了一些WPF和WP开发,Prism和MVVM Light Toolkit是常用来构buildWP应用程序,我认为它是完美的Windows Phone应用程序体系结构! 所以我使用我以前的WP开发经验,然后模仿创buildAndroid MVVM Light Toolkit (一个工具包帮助构buildAndroid MVVM应用程序,我们有更多的View的数据绑定属性(比如Uri for ImageView),我们创build了一些命令来处理事件(如点击button),也有一个全局消息pipe道与其他ViewModel进行通信)。
GitHub: Android MVVM Light Toolkit ,有样本供参考。
build筑: http : //upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
希望能帮到你!
有一个叫MVVMCross的项目。
这是由Stuart Lodge开发的免费,开放源代码和精心devise的MVVM框架。
他为Android和iPhone实现了绑定,所以现在MVVM也适用于所有这些平台。
对我来说,它是最好的MVVM框架之一 – 它真正展示了MVVM的力量。 有了它,你可以为不同的平台(WP7,Android,iPhone,WinRT)编写一个代码(模型和视图模型层),只需更改应用程序UI(视图层)。
只是作为其他人可能感兴趣的人参考。 我是RoboBinding的一个贡献者 – Android平台的数据绑定表示模型框架。 这是为了同样目的的另一个框架。 除了帮助项目结构之外,RoboBinding的一个主要关注点是使用普通的JUnittesting来testingandroid应用程序而不是Androidunit testing,因为unit testing对于保证项目质量非常重要,但是Androidunit testing需要很长时间才能运行并使unit testing有些不切实际。 RoboBinding本身带有300多个JUnittesting来确保其质量。 MVVM源自微软,是Martin Fowler介绍的Presentation Modeldevise模式的专业化版本。 其他select:Android绑定,Bindroid和MvvmCross。
大! 由@Florina Muntenescu的文章
Model-View-ViewModel模式
MVVM模式的主要参与者是:
- 视图 – 通知ViewModel关于用户的操作
- ViewModel – 暴露与视图相关的数据stream
- DataModel – 抽象数据源。 ViewModel使用DataModel来获取和保存数据。
MVVM架构示例:
https://github.com/erikcaffrey/People-MVVM
https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding/
https://github.com/iammert/Android-MVVM-Architecture
您可以按照以下步骤在碎片中进行数据绑定:我已经在“碎片中绑定数据的示例”中发布了devise和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; } }
开发人员站点DataBinding指南行
我发现使用Android数据绑定库编写的关于MVVM的可testingAndroid MVVM App系列非常好。 在这个系列中,他从简单的例子到循环查看,还有testing。
你也可以试试mv2m库 。
在github中有很多MVVM框架的例子。 我推荐使用DroidWizard
DroidWizard在视图和视图模型之间做了自己的耦合,框架与mvvm略有不同。
ModelEngine ViewModel查看模型ViewModel视图的全局