Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“由:java.lang.RuntimeException:视图必须有一个标记引起的”的实际含义是什么?_Java_Android_Android Activity_View - Fatal编程技术网

“由:java.lang.RuntimeException:视图必须有一个标记引起的”的实际含义是什么?

“由:java.lang.RuntimeException:视图必须有一个标记引起的”的实际含义是什么?,java,android,android-activity,view,Java,Android,Android Activity,View,如果知道需要什么标签,请通知我 原因:java.lang.RuntimeException:视图必须有标记 __BaseActivity.java @Override public void setContentView(int layoutResID) { mBinding.contentParent.removeAllViews(); DataBindingUtil.inflate(LayoutInflater.from(this), lay

如果知道需要什么标签,请通知我

原因:java.lang.RuntimeException:视图必须有标记

__BaseActivity.java

    @Override
    public void setContentView(int layoutResID) {

        mBinding.contentParent.removeAllViews();
        DataBindingUtil.inflate(LayoutInflater.from(this), layoutResID, mBinding.contentParent, true);
        super.setContentView(mBinding.getRoot());
    }
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.my_wallet);
}
__ChildActivity.java

    @Override
    public void setContentView(int layoutResID) {

        mBinding.contentParent.removeAllViews();
        DataBindingUtil.inflate(LayoutInflater.from(this), layoutResID, mBinding.contentParent, true);
        super.setContentView(mBinding.getRoot());
    }
 @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)
java.lang.RuntimeException:无法启动活动组件信息{com.mydev}:java.lang.RuntimeException:视图必须有标记
在
原因:java.lang.RuntimeException:视图必须有标记
在android.databinding.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:121)

不知道,但正在工作 这通常发生在尝试使用
DataBindingUtil.inflate()
对不支持数据绑定的布局进行充气时。换句话说,您试图充气的布局的根元素不是

我在重构活动以使用数据绑定时遇到了这个问题,并且该活动有多个布局。我成功地重构了其中一个布局,在其根目录中包含
元素,但我没有重构所有其他布局(针对其他屏幕密度、语言、模块等的布局)

检查以确保所有可能匹配的布局都配置了
作为其根元素


查看此开发人员文档通常在学习android中的数据绑定时发生,我们通常使用main_activity.xml,然后包含content_main.xml,但我们错误地将
放在我身上,这是因为没有一个布局用于所有分辨率(仅在布局和布局正常时).

发生这种情况是因为库的布局文件(标记错误的文件)与应用程序模块中的另一个文件同名。两者都使用了数据绑定。

发生此错误的另一种情况是在RecyclerView的ViewHolder中

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

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)
    }
}

我使用的充气机没有“附件”。
此错误总是与适配器中的充气器相关的问题一起出现。

请将XML布局转换为数据绑定。这可能会导致此异常

<layout>
xml components here...
</layout>

这里的xml组件。。。

我通过将布局包装在
标记中来转换布局,但我忘记将名称空间声明移动到开头的
标记:

之前

<layout>
    <androidx.constraintlayout.widget.ConstraintLayout 
     xmlns:android="http://schemas.android.com/apk/res/android">

之后

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <androidx.constraintlayout.widget.ConstraintLayout>


看起来您的数据绑定库(或类)有一个bug。尝试在xml中手动设置标记,如果lib没有覆盖它们,这应该可以解决您的问题。不建议(通常)将null作为父项传递,这可能会导致崩溃。您可以使用
(ViewGroup)findviewbyd(android.R.id.content)
代替,并传递
true
,还可以节省我的时间,谢谢!