无论如何使用viewStubs与dataBinding?可以ViewStubProxy帮忙吗?
我的存根当前看起来像这样:
<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="@{myobject.bottom ? bottom:top}" />
Run Code Online (Sandbox Code Playgroud)
但是当我给viewStub充气时,这个布局会被取代,所以ViewStubs如何与android dataBinding一起使用?
这是我从文档中看到的:
ViewStubs
ViewStubs与普通视图略有不同.它们开始是不可见的,当它们要么被显示或被明确告知要膨胀时,它们会通过膨胀另一个布局来替换它们.
由于ViewStub基本上从View层次结构中消失,因此绑定对象中的View也必须消失以允许收集.由于视图是最终的,因此ViewStubProxy对象取代了ViewStub,使开发人员在ViewStub存在时可以访问ViewStub,并且在ViewStub膨胀时也可以访问膨胀的View层次结构.
在膨胀另一个布局时,必须为新布局建立绑定.因此,ViewStubProxy必须侦听ViewStub的ViewStub.OnInflateListener并在那时建立绑定.由于只有一个可以存在,ViewStubProxy允许开发人员在其上设置一个OnInflateListener,它将在建立绑定后调用它.
我的库模块中有一个抽象的 BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Normal method to inflate the layout
mBinding = DataBindingUtil.setContentView(this, R.layout.base_view_stub_layout);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
if (mBinding != null && mBinding.viewStub != null && mBinding.viewStub.getViewStub() != null) {
mBinding.viewStub.getViewStub().setLayoutResource(getLayoutId());
}
if (!hasStubInflated) {
View inflatedView = mBinding.viewStub.getViewStub().inflate();
//Abstract method
onViewStubInflated(inflatedView, savedInstanceState);
//Normal method to hide progress bar
onViewStubInflated();
}
initControllers();
handleViews();
setListeners();
restoreValues(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
AppModule 中的 MainActivity 扩展了库模块的 BaseActivity,因此获得了一个抽象方法来覆盖:
MainActivity 扩展了 BaseActivity
private ActivityMainBinding mBinding;
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override …Run Code Online (Sandbox Code Playgroud) data-binding android viewstub android-databinding android-architecture-components