Android数据绑定(类似于WPF)?

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

在发帖之前,我已经搜索了一些类似的问题——但是当涉及到Android和数据绑定时,我有一个一般性的问题(我检查的其他答案并没有让我更进一步……)。假设您有一辆高级车辆:

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
现在,当我将EditText、TextView等添加到视图中时,我希望它们绑定到上下文对象的某些属性(在本例中为Vehicle)。。。Mhhh如果我的问题不清楚或者你需要更多的信息,请务必让我知道:)提前谢谢

另外,我想熟悉WPF的人现在可能会明白我的意思了吧?我自己刚刚读到了WPF,发现它是一种处理东西的好方法

p.p.s我知道这个项目,但我想知道Android中是否有某种内置方法,或者可能有人遵循某种约定:)我想这更像是一个绑定理论问题…

Android SDK中没有“烘焙”任何东西,它提供MS WPF中的等效数据绑定功能。谷歌正在为运行Android的各种设备提供较低级别的界面。到目前为止,Android开发社区还没有出现更高级别的应用程序框架。(恕我直言,考虑到各种安卓设备的框架上存在着各种不同的约束条件,要创造这样一个东西,需要像谷歌这样的大公司。)

您可以在自己的应用程序中创建一组数据绑定类来处理您对MVVM模式的需求。“DataBinder”将在Android View对象上设置相关的事件处理程序,并在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}"/>