Android - 我可以以编程方式进行数据绑定(bind)吗? - 没有布局 XML

标签 android mvvm data-binding observable viewmodel

下面是与我想要实现的目标等效的 XML,但没有 XML

<Button
    android:id="@+id/bt_start"
    android:onClick="@{() -> vm.onClickedStart()}"
    android:text='@{vm.btStartLbl}' />

所以如果我有:

ConstraintLayout cl = findViewById(R.id.cl);
Button btn = new Button(MyActivity.this);

btn.setText("How to Data Bind here?");

btn.setOnClickListener(new OnClickListener (){ /* how to databind here? */ });

cl.addView(btn);

如何像上面的 xml 一样对其进行数据绑定(bind)? 这可能吗?

最佳答案

对于自动设置数据,您可以使用ObservableField

自动更新btn的简化版本:

ObservableField<String> title = new ObservableField<>();

Observable.OnPropertyChangedCallback propertyChangeCallback = new Observable.OnPropertyChangedCallback() {
    @Override
    public void onPropertyChanged(Observable sender, int property) {
        btn.setText(title.get());
        // here what you want to automatically update
    }
};


public void onStart() {
    // activity/fragment lifecycle method
    title.addOnPropertyChangedCallback(propertyChangeCallback);
}


public void onStop() {
    // activity/fragment lifecycle method
    title.removeOnPropertyChangedCallback(propertyChangeCallback);
}

然后每当你调用title.set("some value");时,就会自动触发更新。

关于Android - 我可以以编程方式进行数据绑定(bind)吗? - 没有布局 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386329/

相关文章:

c# - Observable.Interval 未以预期频率更新 UI

wpf - 使用 ListBox(或其他 ItemsControl)托管 Caliburn 演示者

WPF 工具提示绑定(bind)

.net - 如何根据 FieldName 显示数据 - Access

android - 是否可以从 Android 中的适配器获取对 ListView 的引用?

Android,如何知道appcompat等库的特定sdk版本的最新版本

Android 应用程序在最小化时自动重置

wpf - 用于动态加载类型的 ListBox DataTemplate

c# - 使用 MVVM 将命令绑定(bind)到 DataTemplate 中的控件

android - 具有 Firebase 身份验证用户的 Firebase 数据库数据结构