Android - 如何使用 com.android.databinding:dataBinder 进行双向绑定?
Android - How to do a bi directional binding with com.android.databinding:dataBinder?
如何使用新的 dataBinder 插件进行双向绑定(从 UI 到数据以及从数据到 UI)?
非常感谢!
我们还没有这个,也许在 v1 之后。不确定您的用例是什么,但我们已经为每个带有 ID 的视图创建了字段,因此当您需要数据时,您可以使用该视图获取它。
例如如果你有 <EditText android:id="@+id/mytext"/>
生成的绑定 class 将具有 public final EditText mytext;
。
这是一个简单的例子:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="bind" type="com.example.app.MainActivity.Bind"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onTextChanged="@{bind.textChanged}"
android:text="@{bind.text}"/>
</LinearLayout>
</layout>
和activity代码(使用retrolambda):
public class MainActivity extends AppCompatActivity {
private final Bind bind = new Bind();
public class Bind {
public ObservableField<String> text = new ObservableField<>();
public TextViewBindingAdapter.OnTextChanged textChanged = (s, start, before, count) -> {
System.out.println("New value: " + s);
};
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setBind(bind);
}
}
如何使用新的 dataBinder 插件进行双向绑定(从 UI 到数据以及从数据到 UI)?
非常感谢!
我们还没有这个,也许在 v1 之后。不确定您的用例是什么,但我们已经为每个带有 ID 的视图创建了字段,因此当您需要数据时,您可以使用该视图获取它。
例如如果你有 <EditText android:id="@+id/mytext"/>
生成的绑定 class 将具有 public final EditText mytext;
。
这是一个简单的例子:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="bind" type="com.example.app.MainActivity.Bind"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onTextChanged="@{bind.textChanged}"
android:text="@{bind.text}"/>
</LinearLayout>
</layout>
和activity代码(使用retrolambda):
public class MainActivity extends AppCompatActivity {
private final Bind bind = new Bind();
public class Bind {
public ObservableField<String> text = new ObservableField<>();
public TextViewBindingAdapter.OnTextChanged textChanged = (s, start, before, count) -> {
System.out.println("New value: " + s);
};
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setBind(bind);
}
}