DataBindingComponents 如何在每个布局的基础上工作?
How DataBindingComponents works on per-layout basis?
Android DataBinding 库是我学习 MVVM 的一个迷人库。
现在有一个问题,如何在将文本更新为UI、每个布局之前播放动画。 (不是使用 BindingAdapter
的全局布局解决方案,而是使用静态绑定适配器。)
从 IO16 视频我知道也许我可以使用 DataBindingComponent
来实现这种效果,就像 setImageUrl
示例一样,但是我在 上找不到任何示例代码如何DataBindingComponents 和 BindingAdapter 注释实例方法确实有效,任何人都可以提供一些细节吗?
==更新2016-07-06==
我知道我可以使用带有自定义标签的静态绑定适配器,但这不是我想要的。
==更新2017-08-04==
我不知道为什么这个问题被标记为重复,如果你知道 android 数据绑定,另一个问题就完全不同了。就是不知道怎么去掉重复标记,所以在这里修改一下。
看了一遍io16的session终于找到解决办法了:
首先,使用注释为 BindingAdapter
.
的任何方法创建一个 class
public class OptionBindingAdapter {
private boolean mOptionsShowing;
@BindingAdapter("android:text")
public void setOption(TextView button, String text) {
if (text == null) {
return;
}
if (button.getTranslationY() > 0) {
button.setText(text);
button.setVisibility(View.VISIBLE);
button.animate()
.translationY(0)
.start();
} else {
button.animate()
.translationY(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, button.getResources().getDisplayMetrics()))
.start();
}
}
}
然后创建一个实现 DataBindingComponent
的 class,您只需创建一个 getter 方法,其中 returns 是 [=32] 的一个实例=] 以上.
public class OptionBindingComponent implements DataBindingComponent {
private OptionBindingAdapter mOptionBindingAdapter = new OptionBindingAdapter();
public OptionBindingAdapter getOptionBindingAdapter() {
return mOptionBindingAdapter;
}
}
现在您可以创建此组件的任何实例并在绑定时使用它,例如在 Activity#onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main, new OptionBindingComponent());
mViewModel = new OptionsViewModel(new OptionsRepository(), this);
mBinding.setVariable(me.zhanghailin.androiddatabindingwithanimations.BR.options, mViewModel);
}
完成!就是这样,效果是绑定适配器将用于此绑定,而不是默认组件。
Android DataBinding 库是我学习 MVVM 的一个迷人库。
现在有一个问题,如何在将文本更新为UI、每个布局之前播放动画。 (不是使用 BindingAdapter
的全局布局解决方案,而是使用静态绑定适配器。)
从 IO16 视频我知道也许我可以使用 DataBindingComponent
来实现这种效果,就像 setImageUrl
示例一样,但是我在 上找不到任何示例代码如何DataBindingComponents 和 BindingAdapter 注释实例方法确实有效,任何人都可以提供一些细节吗?
==更新2016-07-06==
我知道我可以使用带有自定义标签的静态绑定适配器,但这不是我想要的。
==更新2017-08-04== 我不知道为什么这个问题被标记为重复,如果你知道 android 数据绑定,另一个问题就完全不同了。就是不知道怎么去掉重复标记,所以在这里修改一下。
看了一遍io16的session终于找到解决办法了:
首先,使用注释为 BindingAdapter
.
public class OptionBindingAdapter {
private boolean mOptionsShowing;
@BindingAdapter("android:text")
public void setOption(TextView button, String text) {
if (text == null) {
return;
}
if (button.getTranslationY() > 0) {
button.setText(text);
button.setVisibility(View.VISIBLE);
button.animate()
.translationY(0)
.start();
} else {
button.animate()
.translationY(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, button.getResources().getDisplayMetrics()))
.start();
}
}
}
然后创建一个实现 DataBindingComponent
的 class,您只需创建一个 getter 方法,其中 returns 是 [=32] 的一个实例=] 以上.
public class OptionBindingComponent implements DataBindingComponent {
private OptionBindingAdapter mOptionBindingAdapter = new OptionBindingAdapter();
public OptionBindingAdapter getOptionBindingAdapter() {
return mOptionBindingAdapter;
}
}
现在您可以创建此组件的任何实例并在绑定时使用它,例如在 Activity#onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main, new OptionBindingComponent());
mViewModel = new OptionsViewModel(new OptionsRepository(), this);
mBinding.setVariable(me.zhanghailin.androiddatabindingwithanimations.BR.options, mViewModel);
}
完成!就是这样,效果是绑定适配器将用于此绑定,而不是默认组件。