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

数据绑定“错误:找不到符号类模型”

越雨泽
2023-03-14

首先,我需要承认这里有一个明显非常相似但不重复的问题。在该线程中提出的解决方案都不起作用。

我的应用程序文件结构如下:

app
  java
    [mydomain].[myapplication]
      Models
        DataModel.java
      MainActivity.java
  res
    layout
      activity_main.xml
      content_main.xml
      my_inner_layout.xml

我的应用程序build.gradle包含

dataBinding {
    enabled = true
}
import [mydomain].[myapplication].Models.DataModel;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemsSelectedListener {

    DataModel dataModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ... <other layout creation template code> ...

        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        dataModel = new DataModel();
        binding.setValues(dataModel);
    }

    <navigation and auto-generated methods>
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="values"
            type="[mydomain].[myapplication].Models.DataModel" />
    </data>
    <android.support.constraint.ConstraintLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        >

        <TextView
            android:id="@+id/intro_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="@{values.valueOne}"/>

        <TextView
            android:id="@+id/buying_recommendation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/intro_text"
            app:layout_constraintTop_toBottomOf="@id/intro_text"
            android:text="@{values.valueTwo}"/>
    </android.support.constraint.ConstraintLayout>
</layout>

在文本中,错误有不同的错误:无法找到符号类模型错误:包模型不存在

如果我将datamodel.java从Models包中移出并直接放入[mydomain].[myapplication],那么我会得到不同的结果。它确实在仿真程序中构建和运行,但大部分布局信息没有出现。左上角没有汉堡包菜单,页眉没有标题文本,右上角没有设置按钮,以前由Android Studio中的自动生成代码自动包含的值。我也无法使用setTitle在代码中设置标题。

但是,从左侧滑动确实会带来导航抽屉。

共有1个答案

戚建白
2023-03-14

好吧,我意识到“类模型不存在”这件事是从何而来的。我不知道是责怪我自己的愚蠢,还是这种绑定在Android上实现的愚蠢挑剔的方式。包需要用小写“M”来称为models,而不是models。绑定自动名称转换的东西一定认为models是一个类,而不是一个包。

要修复布局,必须将oncreate方法更改为

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    dataModel = new DataModel();
    cycleInformationBinding.setRecommendation(dataModel);

    // set toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // Drawer layout setting
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

具体地说,事情必须按顺序发生:

  1. SetContentView到主活动
  2. 设置数据模型绑定
  3. 布局问题,如抽屉和工具栏。

任何其他顺序都会导致模型绑定失败或工具栏无法正确显示。

 类似资料:
  • 我正在开始使用特性。我正面临这方面的问题。

  • 迁移到androidx后 我在编译时遇到问题 错误:找不到符号androidx。数据绑定。数据绑定组件 符号:类DataBindingComponent位置:包androidx。数据绑定 im使用的Gradle版本为5.4.1 注:androidx中的其他组件。数据绑定包工作正常。像DataBindingUtil 只有DataBindingComponent不工作

  • 我下载了一个Android项目,但我得到了这个错误: 样品导入: 样品用法: 代码时没有错误,但在编译时我得到了我提到的错误。 当我尝试在Android Studio上进行定义时,我不能。 应用程序级生成。格拉德尔: 我试着清理和重建这个项目,但还没有成功。 谢谢你的帮助。

  • 我是Android应用程序开发的新手,所以请耐心等待我。我正在编写一个应用程序,该应用程序从Google Play服务获取GPS位置,然后通过蓝牙广播数据。我有一个获取位置的位置活动,以及一个广播数据的 AdvertisingActivity。 我的问题是我很难理解Android应用程序中的文件结构,所以我怀疑我缺乏理解是我遇到错误的原因。 下面是位置活动的一个代码段,其中错误是: 为什么编译器找

  • 这里有一个类似的答案:如何在Java中将函数作为参数传递? 但提供的正确答案不起作用。我有一门课: 在函数内部我试图将传递到,但我得到的错误是: 找不到符号 符号:类Callable 我不知道为什么。 另外,我尝试使用返回类型字符串作为xMethod,您能传递一个返回类型不同的函数吗?

  • 我对kotlin相对较新,并试图在一些片段中构建一个带有数据绑定的项目。我有一个名为UserFraank的片段,其中包含一个Recyclview,如下所示: 以及用户的xml布局文件片段。xml如下所示: 还有一个类似的适配器类和item_user.xml: item-user.xml: 请注意,gradle中已经启用了数据绑定,这里非常重要的问题是,在我的片段和适配器中,这一行: 报告类型不匹配