我目前正在进行大量的WPF开发,并开始创建一些基本的Android应用程序。在创建WPF应用程序时,我经常使用MVVM,通常使用Prism,并且想知道Android平台是否有任何MVVM示例?
答案 0 :(得分:83)
我是Android-Binding的开发者。就像@Brentley所说,这是一个非常新的项目,但我希望能获得更多的嗡嗡声和经验,以便它可以得到改善。回到你的问题,我在MVVM上用android-binding编写了一些简单的介绍/教程:
潜在的采用者也请注册project discussion group.
答案 1 :(得分:7)
我有时会使用ViewModels从纯模型转换为模型应该显示的内容,但是MVVM-isms的大部分来自于你在WPF框架中内置了这个海量数据绑定引擎的事实。您可能无法在Android世界中找到WPF + MVVM的确切体验,但您可以采用很多好的概念并实现它们(只是没有自动数据绑定的东西)。
首先,只需创建ViewModels。您不需要像Prism这样的框架来创建ViewModels。您没有所有PropertyChanged通知和类似的东西,但您可以将您的数据转换为UI可以更好地使用的信息,这将清理您的代码。一个完美的例子是我用滑块重的UI做的事情。 Android的SeekBar始终为零,并使用整数值,因此您无法绑定模型中的最小值,最大值和增量值。您可以使用ViewModel将您的最小/最大值转换为您的SeekBar可以使用的基于0的等价物......只是一个示例。基于值范围等显示颜色和大小也是如此。对我而言,这就是ViewModel的全部内容。
就DependencyInjection而言,请查看RoboGuice。我刚开始在其中一个项目中看到其创建者在本地Meetup上的演示文稿时开始使用它,这可能就是您正在寻找的内容。
答案 2 :(得分:4)
现在有一个官方Android数据绑定插件,虽然它目前仍处于测试阶段。还正在努力为Android Studio的beta版本中的绑定语法添加工具支持。
有关详细信息,请参阅以下内容
答案 3 :(得分:3)
正在开发一个相对较新的框架,允许将视图绑定到名为android-binding的ViewModel。使用此框架和RoboGuice,您可以获得MVVM。该框架仍然需要一些工作,但这是一个很好的起点。
答案 4 :(得分:3)
Android-Data-Binding库是一种用于将数据连接到用户界面元素的工具。创建布局文件并标记每个项目后,一行代码会将所有数据绑定到用户界面元素,从而节省您完成其他任务的时间。
答案 5 :(得分:3)
模型 - 视图 - 视图模型模式
MVVM模式的主要参与者是:
MVVM架构示例:
https://github.com/erikcaffrey/People-MVVM
https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding/
https://github.com/iammert/Android-MVVM-Architecture
答案 6 :(得分:2)
最近,我已经实现了MVVM模式,用于构建带有数据绑定库的Android应用程序。在这里,您可以阅读我已完成的工作和代码片段的详细评论:http://cases.azoft.com/mvvm-android-data-binding/
要详细了解该主题,您还可以查看以下应用示例:https://github.com/ivacf/archi
有搜索和列表屏幕完成工作的可视化示例。
答案 7 :(得分:2)
几年前,我还做了一些WPF和WP开发,Prism& amp; MVVM Light Toolkit通常用于构建WP App,我认为它非常适合Windows Phone应用程序架构!所以我使用我以前的WP开发经验,然后模仿创建 Android MVVM Light Toolkit (一个工具包帮助构建Android MVVM应用程序,我们有更多的视图数据绑定属性(比如Uri for ImageView),我们创建一些处理事件的命令(比如点击Button),还有一个全局消息管道与其他ViewModel通信。)
GitHub: Android MVVM Light Toolkit,有参考样本供参考。
希望能帮到你!答案 8 :(得分:1)
有一个名为MVVMCross的项目。
这是由Stuart Lodge开发的免费,开源和精心设计的MVVM框架。
他实现了Android和iPhone的绑定,所以现在MVVM也适用于所有这些平台。
对我而言,它是最好的MVVM框架之一 - 它真正展示了MVVM的强大功能。有了它,您可以为不同的平台(WP7,Android,iPhone,WinRT)编写一个代码(模型和视图模型层),只需更改应用程序UI(视图层)。
答案 9 :(得分:1)
仅发布作为对可能感兴趣的其他人的参考。我是RoboBinding的贡献者 - Android平台的数据绑定演示模型框架。它是同一目的的另一个框架。除了帮助项目结构,RoboBinding的一个主要焦点是使用正常的JUnit测试来测试Android应用程序而不是Android单元测试,因为单元测试对于保证项目质量非常重要,但Android单元测试需要很长时间才能运行并使单元测试有点不切实际。 RoboBinding本身带有300多个JUnit测试,以确保其质量。 MVVM起源于Microsoft,是Martin Fowler介绍的Presentation Model设计模式的专业化。其他选择:Android-Binding,Bindroid和MvvmCross。
答案 10 :(得分:0)
您可以在Fragments中按照以下步骤进行DataBinding:我已经在Fragment中绑定数据的示例中发布了设计和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;
}
}
答案 11 :(得分:0)
我发现这个使用Android数据绑定库编写的关于MVVM的Writing Testable Android MVVM App系列非常好。在这个系列中,他从简单的例子到recyclerview进行了解释,并且还有测试。
您也可以尝试mv2m library。
答案 12 :(得分:0)
github中有很多MVVM框架的例子。我建议使用DroidWizard
DroidWizard在视图和视图模型之间进行自己的耦合,框架与mvvm略有不同。
ModelEngine ViewModel查看模型ViewModel视图的内容
答案 13 :(得分:0)
https://github.com/MindorksOpenSource/android-mvvm-architecture
Android MVVM体系结构:示例应用程序
此存储库包含一个详细的示例应用程序,该应用程序使用Dagger2,Room,RxJava,FastAndroidNetworking,PlaceHolderView和AndroidDebugDatabase实现MVVM架构
该应用具有以下软件包:
outline: 1px solid transparent