Android数据绑定(类似于WPF)?
在发帖之前,我已经搜索了一些类似的问题——但是当涉及到Android和数据绑定时,我有一个一般性的问题(我检查的其他答案并没有让我更进一步……)。假设您有一辆高级车辆:Android数据绑定(类似于WPF)?,android,wpf,data-binding,Android,Wpf,Data Binding,在发帖之前,我已经搜索了一些类似的问题——但是当涉及到Android和数据绑定时,我有一个一般性的问题(我检查的其他答案并没有让我更进一步……)。假设您有一辆高级车辆: public class Vehicle { private Owner owner; private String brand; //getter and setter for above attributes... } 这是Owner类 public class Owner { private String nam
public class Vehicle {
private Owner owner;
private String brand;
//getter and setter for above attributes...
}
这是Owner类
public class Owner {
private String name;
}
现在-我最近正在研究微软WPF采用的MVVM(ModelView-ViewModel)模式。这让我想知道:假设我想绑定我的所有者对象的name属性,它是Vehicle对象的子对象,那么Android中是否有某种标准的方法来实现这一点?还假设,在更新模型之前,我可能必须验证输入
我设想了以下组件(假设为MVVM):
- 视图(一个活动)不包含应用程序逻辑,因此它或多或少是空的
- ViewModel将处理车辆对象的实例并对其执行操作
- 模型本身看起来就像我之前发布的代码一样——完全不理会视图 以及ViewModel
对于你的申请来说,这是否值得是一个判断。我的猜测是,编写Databinder类比直接钩住低级视图事件处理程序需要更多的努力。框架主要在您不必自己编写的情况下非常有用。我的项目是尝试通过XML布局进行数据绑定。因为谷歌没有提供内置方法(我无法预见谷歌会这么做),这就是我开始这个项目的原因 自从你第一次提出问题以来,情况发生了很大变化。
最重要的是给了我们
MVVMCross
这个项目提供了一个跨平台的mvvm移动开发
框架构建在Silverlight之上,适用于WP7,Mono适用于Android和
iOS的MonoTouch和Windows 8应用商店的WinRT XAML框架
应用
该项目广泛使用可移植类库来
提供可维护的跨平台C#本机应用程序
它在视图
中针对视图模型提供数据绑定
例如,它启用以下功能:
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="{'Text':{'Path':'Query','Mode':'TwoWay'}}" />
资源:
Github页面:
介绍:
还有一个非常好的介绍教程:读了一些关于这个主题的内容,我发现了一个适用于Android的“数据绑定表示模型框架” 与Android绑定项目类似,您可以使用额外的名称空间将属性(单向或双向)和事件绑定到XML视图
虽然它也不是内置的方法,但可能对您有很大帮助。我意识到这是几年后的事了,但我遇到了与下面相同的问题,这可能有助于减轻负载 机器人绑定-处理绑定-如上所述 RoboGuice-依赖项注入 有一个非常好的机器人bind视频演示,将帮助解释什么和如何
我并不参与这两项工作,但对于那些仍在努力解决绑定问题的人来说,它们确实很有希望,特别是在涉及到的代码上。RoboBind还处理双向更新。Android M将提供强大的数据绑定库 它现在有售 它在
xml
和java
文件中看起来非常棒:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
/>
绑定:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);
}
除了Oleksii的回答之外,对于那些想看一个样本项目的人(谷歌似乎还没有提供任何样本项目) 请注意:
对我不起作用,所以我使用classpath“com.android.databinding:dataBinder:1.0-rc0”
classpath组:“com.android.databinding”,名称:“dataBinder”,版本:“1.0-rc0”
- 如果出现错误,请尝试清除/重建
- 如果您需要在数据更改时发出通知,请不要忘记实现android.databinding.Observable或扩展BaseObservable
- 这个版本是7。这是一个支持库
- 我的项目不遵循MVVM,它只使用数据绑定。添加了MVVM示例
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
但此时它的事件连接机制(rc1版本)无法绑定到从Observable扩展的类上的方法(编译时抛出异常;
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>