Вид должен иметь тег - PullRequest
       69

Вид должен иметь тег

0 голосов
/ 03 ноября 2019

У меня есть абстрактный 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);
    }

MainActivity из AppModule расширяет BaseActivity библиотечного модуля и, следовательно, получает абстрактный метод для переопределения:

MainActivity расширяет BaseActivity

private ActivityMainBinding mBinding;

@Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

@Override
    public void onViewStubInflated(View inflatedView, Bundle savedInstanceState) {
        if (mBinding == null || mBinding.getRoot() != inflatedView) {
            mBinding = ActivityMainBinding.bind(inflatedView);
        }
    }

Когда я запускаю приложение, я получаю:

 Caused by: java.lang.RuntimeException: view must have a tag
        at com.example.android.emailapp.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:67)
        at androidx.databinding.MergedDataBinderMapper.getDataBinder(MergedDataBinderMapper.java:74)
        at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:199)
        at androidx.databinding.ViewDataBinding.bind(ViewDataBinding.java:693)
        at com.example.android.emailapp.databinding.ActivityMainBinding.bind(ActivityMainBinding.java:99)
        at com.example.android.emailapp.databinding.ActivityMainBinding.bind(ActivityMainBinding.java:87)
        at com.example.android.emailapp.login.MainActivity.onViewStubInflated(MainActivity.java:86)
        at com.library.android.common.ui.baseui.BaseActivity.onCreate(BaseActivity.java:52)

Обратите внимание, что у меня есть тег макета в XML-формате BaseActivity и MainActivity.

Я пытался это безуспешно.

Is mBinding.viewStub.getViewStub (). SetLayoutResource (getLayoutId ()) anпроблема в BaseActivity, поскольку он попытается получить макет из AppModule? , если это так, как я могу ее решить?

Если вы знаете ответ, пожалуйста, попытайтесь объяснить, почему это так. происходит вместе с решением ...

Уже пробовал

В представлении должна быть ошибка тега

Что означает представление, должно иметь ошибку тега

Как использовать databindinг для viewstub

...