相关疑难解决方法(0)

Android数据绑定 - 如何使用ViewStub进行数据绑定

无论如何使用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,它将在建立绑定后调用它.

data-binding android viewstub

14
推荐指数
2
解决办法
5640
查看次数

视图必须有标签

我的库模块中有一个抽象的 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

5
推荐指数
1
解决办法
2139
查看次数