有可能在Java中为Android实现模型-视图-控制器模式吗?
或者它已经通过活动实现了吗?或者有没有更好的方法来实现Android的MVC模式?
有可能在Java中为Android实现模型-视图-控制器模式吗?
或者它已经通过活动实现了吗?或者有没有更好的方法来实现Android的MVC模式?
当前回答
Android上的动作、视图和活动是与Android UI一起工作的内置方式,是模型-视图-视图模型(MVVM)模式的实现,它在结构上与模型-视图-控制器相似(在同一家族中)。
据我所知,没有办法打破这个模式。这可能是可以做到的,但是您可能会失去现有模型的所有好处,并且必须重写自己的UI层以使其正常工作。
其他回答
在Android中,你没有MVC,但你有以下:
您可以根据分辨率、硬件等在各种XML文件中定义用户界面。 您可以根据语言环境等在各种XML文件中定义资源。 您可以扩展ListActivity、TabActivity等类,并通过扩展器使用XML文件。 您可以为业务逻辑创建任意数量的类。 很多Utils已经为您编写- DatabaseUtils, Html。
使用布局、资源、活动和意图创建Android UI是MVC模式的实现。请参阅以下链接了解更多信息- http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
PDF镜像
Android的MVC模式(有点)是用它们的Adapter类实现的。他们用“适配器”替换控制器。适配器的描述声明:
对象充当AdapterView和对象之间的桥梁 该视图的底层数据。
我只是在寻找一个从数据库读取的Android应用程序,所以我不知道它工作得有多好。然而,它看起来有点像Qt的模型-视图-委托架构,他们声称这是传统MVC模式的一个升级。至少在PC上,Qt的模式运行得相当不错。
我同意JDPeckham的观点,并且我相信XML本身不足以实现应用程序的UI部分。
然而,如果你认为Activity是视图的一部分,那么实现MVC是相当简单的。您可以重写Application(由Activity中的getApplication()返回),在这里您可以创建一个在应用程序的生命周期中存在的控制器。
(或者,您也可以使用应用程序文档中建议的单例模式)
厌倦了Android上的MVx灾难,我最近做了一个提供单向数据流的小库,类似于MVC的概念:https://github.com/zserge/anvil
基本上,您有一个组件(活动、片段和视图组)。在内部定义视图层的结构和样式。此外,您还可以定义数据应该如何绑定到视图。最后,您可以在同一位置绑定侦听器。
然后,一旦你的数据被改变——全局的“render()”方法将被调用,你的视图将会被最新的数据巧妙地更新。
下面是一个组件的例子,为了代码紧凑,组件中包含了所有内容(当然,模型和控制器可以很容易地分开)。这里“count”是一个模型,view()方法是一个视图,“v -> count++”是一个控制器,它监听按钮点击并更新模型。
public MyView extends RenderableView {
public MyView(Context c) {
super(c);
}
private int count = 0;
public void view() {
frameLayout(() -> { // Define your view hierarchy
size(FILL, WRAP);
button(() -> {
textColor(Color.RED); // Define view style
text("Clicked " + count); // Bind data
onClick(v -> count++); // Bind listeners
});
});
}
使用分离的模型和控制器,它看起来像:
button(() -> {
textColor(Color.RED);
text("Clicked " + mModel.getClickCount());
onClick(mController::onButtonClicked);
});
在这里,点击每个按钮的数量都会增加,然后“render()”将被调用,按钮文本将被更新。
如果使用Kotlin: http://zserge.com/blog/anvil-kotlin.html,语法将变得更加舒适。此外,对于没有lambdas的Java还有其他语法。
这个库本身是非常轻量级的,没有依赖关系,不使用反射等等。
(声明:我是这个库的作者)