【发布时间】:2020-08-17 02:59:23
【问题描述】:
我为 2 路数据绑定和接缝制作了一个简单的 hello world 完美运行(在 editext 上编写时,textview 会自动更新),但是像官方文档一样在线找到的所有代码都有更多的代码和复杂性,比如https://developer.android.com/topic/libraries/data-binding/two-way
这是我的代码:
public class MainActivity extends AppCompatActivity {
public String pippo;
public Boolean visible = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DataBindingUtil.setContentView(this, R.layout.activity_main);
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="pippo"
type="String" />
<variable
name="visible"
type="Boolean" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={pippo}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{pippo}"
android:visibility="@{visible ? android.view.View.VISIBLE: android.view.View.GONE}" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={visible}" />
</LinearLayout>
</layout>
特别是文档使用这个东西,但接缝没用:
- BaseObservable
- @Bindable
- 避免无限循环的代码
- notifyPropertyChanged
那么,我的代码有什么问题或缺失?
【问题讨论】:
-
基本上没有这些无用的东西,你实际上无法获得数据绑定的超能力。 BaseObservable 具有通知特性和回调和可绑定注释,可以对所做的更改做出反应
-
它确实是因为属性 android:text 具有内置支持,但是假设您要创建一个功能,您必须根据编辑文本更改图标颜色为空或未赢除非您使用 BaseObservable、Bindable 和 notify 属性更改,否则无法做到这一点。双向数据绑定不起作用
-
确定我已经给你了,只是尝试使用双向数据绑定来玩弄可见性。比如,假设你有一个布尔值 isVisible,你必须根据真假来隐藏和显示。双向数据绑定不起作用,但使用 BaseObservable、Bindable 可以使其工作。
-
数据绑定库默认查找名为
set[Attribute]和get[Attribute](用于双向)的方法,如果它们存在(具有适当的输入类型),它们将用于绑定。此外,对于双向来说,需要一个获取侦听器的方法来通知它有关更改。对于内置视图,它们被实现。如果您想添加对自定义视图或自定义属性的支持,则会提供这些文档。所以如果有一些功能已经可用或如您在文档中看到的那样容易实现,它可以非常干净和简单。 -
好问题!我们需要详细的解释。
标签: android android-databinding