当前位置: 首页 > 知识库问答 >
问题:

找不到ActivityMainBindingImpl

华建同
2023-03-14

这来自google站点:为每个布局文件生成一个绑定类。默认情况下,类的名称基于布局文件的名称,将其转换为Pascal大小写,并为其添加绑定后缀。上面的布局文件名是activity_main.xml,因此相应生成的类是activityMainBinding。该类保存从布局属性(例如,user变量)到布局视图的所有绑定,并知道如何为绑定表达式赋值。

在我的例子中,生成了ActivityMainBinding,但不是ActivityMainBindingImpl。那是什么课?它是如何生成的?我的项目是用Kotlin写的。

import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.View;
import androidx.databinding.DataBinderMapper;
import androidx.databinding.DataBindingComponent;
import androidx.databinding.ViewDataBinding;
import com.example.drake.kunuk.databinding.ActivityMainBindingImpl;
import java.lang.IllegalArgumentException;
import java.lang.Integer;
import java.lang.Object;
import java.lang.Override;
import java.lang.RuntimeException;
import java.lang.String;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class DataBinderMapperImpl extends DataBinderMapper {
  private static final int LAYOUT_ACTIVITYMAIN = 1;

  private static final SparseIntArray INTERNAL_LAYOUT_ID_LOOKUP = new SparseIntArray(1);

  static {
    INTERNAL_LAYOUT_ID_LOOKUP.put(com.example.drake.kunuk.R.layout.activity_main, LAYOUT_ACTIVITYMAIN);
  }

  @Override
  public ViewDataBinding getDataBinder(DataBindingComponent component, View view, int layoutId) {
    int localizedLayoutId = INTERNAL_LAYOUT_ID_LOOKUP.get(layoutId);
    if(localizedLayoutId > 0) {
      final Object tag = view.getTag();
      if(tag == null) {
        throw new RuntimeException("view must have a tag");
      }
      switch(localizedLayoutId) {
        case  LAYOUT_ACTIVITYMAIN: {
          if ("layout/activity_main_0".equals(tag)) {
            return new ActivityMainBindingImpl(component, view);
          }
      throw new IllegalArgumentException("The tag for activity_main is invalid. Received: " + tag);
    }
  }
}
return null;
  }
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
    <import type="android.view.View" />
    <variable
            name="handler"
            type="com.example.drake.kunuk.ui.main.MainActivity" />
    <variable
            name="manager"
            type="androidx.fragment.app.FragmentManager" />
</data>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            app:title="@string/app_name"
            app:titleMarginStart="8dp" />

    <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:pager="@{(pager)}">
    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:handler="@{handler}" />

</LinearLayout>
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.example.drake.kunuk.R
import com.example.drake.kunuk.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding: ActivityMainBinding = DataBindingUtil
        .setContentView(this, R.layout.activity_main)
    binding.handler = this
    binding.manager = supportFragmentManager



}

}

共有1个答案

焦宁
2023-03-14

可能的原因是数据绑定阶段的错误。

数据绑定编译器获取布局文件并生成类以支持数据绑定(如您注意的:ActivityMainBindingActivityMainBindingImpl;亲爱的读者,一般模式是{layout}binding{layout}BindingImpl,其中{layout}BindingImpl是布局文件的骆驼大小写名称)。数据绑定编译过程中出现的错误会阻止生成这些支持类。这将导致您在Kotlin或Java编译器中看到的丢失类错误。

目前,数据绑定错误没有显示在cooked构建日志中;要查看它们,请将视图切换到原始编译器输出。从AS3.5开始,数据绑定错误应该显示在cooked日志中。

一旦您从数据绑定编译器找到错误消息,您就可以修复它,或者在不确定的情况下在这里查找如何修复它的答案。

 类似资料:
  • 我是一名学习使用jsp和Servlet构建Web应用程序的学生。一个月以来,我的Web应用程序项目一直运行良好,但今天它的行为突然变得奇怪了。当我提交jsp页面时,它无法找到我的servlet。我已经使用servlet注释来映射请求。 以下是我的JSP:- 以下是我的servlet:- 以下是我的控制台日志:-

  • 问题内容: 我正在运行Windows 8,但无法使javac正常工作。 我已将环境变量中的PATH设置为 我尝试过是否使用’;’ 但无济于事。 我最近在桌面上添加了这个问题;工作,但不是这种情况。 我确保javac确实也存在于bin中。 关于修复的任何建议将不胜感激。 编辑echo%PATH%给出: 确切的错误是:无法将“ javac”识别为内部或外部命令,可操作程序或批处理文件。 问题答案: 至

  • 问题内容: 我正在为我的项目使用jersey,并尝试从字符串中解析URI。 代码很简单,但是下面出现错误 看来程序找不到委托。我已经导入了,并且应该在我的构建路径中包含委托。但我仍然会收到此错误。 有人知道如何解决吗?谢谢! 问题答案: 如果您使用的是Maven,请使用以下依赖项: 对于Gradle,以下将起作用:

  • 问题内容: 我只需要重新安装mysql,我就无法启动它。它找不到套接字(mysql.sock)。问题是我也不能。在Mac OS X 10.4终端中,键入:,然后返回。套接字文件存在于该位置是有道理的,但实际上并不存在。 如何找到套接字文件? 如果locate返回错误的位置,则它必须具有某种内存,并且可能具有索引。如何刷新该索引? 问题答案: 回答问题的第一部分: 跑 并检查“ socket”变量

  • 问题内容: 我正在Eclipse 4.3中设置一个Spring 3.2.3 + Hibernate 4项目。 当我将代码添加到上下文中时,我开始在每个bean中收到以下错误: 现在,我在项目中添加了AspectJ Tools和Cglib依赖项,并且JAR在那里,包括它找不到的类。该应用程序正常运行,并且Spring正在成功管理会话和事务。 我一直在寻找解决方案,但每个答案都指出,由于缺少JAR,因

  • 问题内容: 我是Hibernate的新手,正在阅读《 Hibernate的Java持久性》这本书,并尝试从那里实现该示例。到目前为止,我的Ant构建是成功的,但是当我尝试执行包含main方法的类时,却收到此错误消息: 很明显,hibernate状态找不到我的配置文件,该文件位于根目录中。 项目 我的完整源代码可以在这里找到:http : //pastebin.com/bGDUrxUf 我有一个正在