为了账号安全,请及时绑定邮箱和手机立即绑定

`Caused by: java.lang.RuntimeException: view must

`Caused by: java.lang.RuntimeException: view must

白衣染霜花 2022-01-06 17:48:47
如果知道想要什么标签,请告诉我。Caused by: java.lang.RuntimeException: view must have a tag__BaseActivity.java    @Override    public void setContentView(int layoutResID) {        mBinding.contentParent.removeAllViews();        DataBindingUtil.inflate(LayoutInflater.from(this), layoutResID, mBinding.contentParent, true);        super.setContentView(mBinding.getRoot());    }__ChildActivity.java @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mBinding = DataBindingUtil.setContentView(this, R.layout.my_wallet);}错误日志java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydev}: java.lang.RuntimeException: view must have a tag        at <more...>     Caused by: java.lang.RuntimeException: view must have a tag        at android.databinding.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:121)
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这通常发生在尝试使用DataBindingUtil.inflate()不支持数据绑定的布局来膨胀时。换句话说,您尝试膨胀的布局的根元素不是<layout>.

我在重构Activity以使用数据绑定时遇到了这个问题,并且Activity有多个布局。我成功重构了其中一个布局以将<layout>元素包含在其根部,但我没有重构所有其他布局(其他屏幕密度、语言、模块等的布局)。

检查以确保所有可能的匹配布局都配置<layout>为它们的根元素。

请参阅此开发人员文档布局和绑定表达式


查看完整回答
反对 回复 2022-01-06
?
莫回无

TA贡献1865条经验 获得超7个赞

发生此错误的另一个场景是在 RecyclerView 的 ViewHolder 中。


避免在 ViewHolder 的绑定方法中初始化绑定实例


class BindingAdapter(private val items: List<Any>): RecyclerView.Adapter<BindingHolder>() {

      override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {}


      override fun onBindViewHolder(holder: BindingHolder, position: Int) {

           holder.bindItem(items[position])

      }

 }


class BindingHolder(view: View): RecyclerView.ViewHolder(view) {

    fun bindItem(item: Any) {

        //Don't do this

        val binding = ItemSampleBinding.bind(itemView)

    }

}

数据绑定实例应该在 bind 方法之外初始化,因为 ViewHolders 可以被回收,并且在上面的代码中,我们可以尝试从已经绑定的视图创建绑定实例。


而是在 ViewHolder 的初始化块中创建绑定实例(这可以在init{}块中或在类声明之后,如下所示)


class BindingHolder(view: View): RecyclerView.ViewHolder(view) {

    val binding = ItemSampleBinding.bind(view)


    fun bindItem(item: Any) {

        //Rest of ViewHolder logic

        //binding.textView.text = "Something nice"

    }

}


查看完整回答
反对 回复 2022-01-06
  • 2 回答
  • 0 关注
  • 1016 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信