【问题标题】:Android Studio 1.5.1 + Data Binding: Error messages in the IDEAndroid Studio 1.5.1 + 数据绑定:IDE 中的错误消息
【发布时间】:2017-02-21 01:47:54
【问题描述】:

我正在为 Android Studio 中的 Android 数据绑定而苦苦挣扎。我在 IDE 中收到两条错误消息,我不知道如何解决这些错误:Cannot resolve symbol 'BR'Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}

这就是我所做的:

  • 使用 Android SDK 管理器安装了 Android Support Repository (Rev. 25)
  • Android Studio 1.5.1 中创建了一个新项目:
    • 应用程序名称​​DataBindingTest(域my.namespace,包namespace.my.databindingtest
    • 对于手机和平板电脑,最低 SDK 版本 9,目标 SDK 版本 23
    • 添加了一个空活动
  • 在应用模块的 build.gradle 文件中添加了dataBinding { enabled = true }(并进行了 gradle 同步)
  • 添加了一个 Data 类,它扩展了 BaseObservable 并具有属性 text(字符串)和 visible(布尔)
  • 更改了activity_main.xml:包裹在layout 标记中,添加了data 部分并使用了data.textdata.visible 属性。
  • MainActivity类添加了初始化代码

这是更改文件的代码:

build.gradle(模块:app):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "namespace.my.databindingtest"
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
}

Data.java(包namespace.my.databindingtest):

package namespace.my.databindingtest;

import android.databinding.BaseObservable;
import android.databinding.Bindable;

public class Data extends BaseObservable {
    private String text;
    private boolean visible;

    public Data(String text, boolean visible) {
        this.text = text;
        this.visible = visible;
    }

    @Bindable
    public String getText() {
        return this.text;
    }

    public void setText(String text) {
        this.text = text;
        notifyPropertyChanged(BR.text);
    }

    @Bindable
    public boolean getVisible() {
        return this.visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
        notifyPropertyChanged(BR.visible);
    }
}

activity_main.xml(资源/布局):

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="data" type="namespace.my.databindingtest.Data"/>
        <import type="android.view.View"/>
    </data>
    <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="namespace.my.databindingtest.MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data.text}"
            android:visibility="@{data.visible ? View.VISIBLE : View.GONE}"/>
    </RelativeLayout>
</layout>

MainActivity.java(包namespace.my.databindingtest):

package namespace.my.databindingtest;

import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import namespace.my.databindingtest.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        Data data = new Data("Hello world!", true);
        binding.setData(data);
    }
}

这些是 IDE 中的错误:

Data.java 文件中,BR 以红色突出显示并带有提示Cannot resolve symbol 'BR'

activity_main.xml 文件中,@{data.visible ? View.VISIBLE : View.GONE} 以红色突出显示,提示Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}

到目前为止我尝试了什么:

  • 文件 > 使缓存无效/重新启动...
  • 构建 > 清理项目
  • 谷歌搜索,玩弄代码...

那么我该如何解决这些错误呢?

【问题讨论】:

  • 曾经解决过这些问题吗?我在可见性表达方面遇到了同样的问题。这很烦人。虽然,BR 对我来说工作正常,但请尝试手动导入 import namespace.my.databindingtest.BR

标签: android android-studio android-databinding


【解决方案1】:

我在使用 BR 符号时遇到了同样的问题。我通过重新启动 Android Studio 来“解决”它:/ (我对 Android 和 IntelliJ 有点陌生) 在处理应该创建 BR 符号的 @Bindable 时,似乎有些事情失败了......

【讨论】:

    【解决方案2】:

    尝试将RelativeLayout 更改为LinearLayout。我也无法让数据绑定准备好运行,但我想我在某处读到过,RelativeLayout 尚不支持

    【讨论】:

    • 尝试找到来源并将其添加到您的答案中,而不是仅仅说我在某处读过
    【解决方案3】:

    Android Studio 2.1 Preview 5
    Build #AI-143.2730271, built on March 31, 2016
    JRE: 1.7.0_80-b15 amd64
    JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
    

    这 3 个步骤帮助我恢复:

    1. 关闭 Android Studio
    2. gradlew 清洁
    3. 打开 Android Studion 和 Build->“制作项目”

    【讨论】:

      【解决方案4】:

      你可以在 MV(ModelView) 中做你的 UI 逻辑。我的意思是 Data.java 文件

      public class Data extends BaseObservable {
      private String text;
      private boolean visible;
      
      public Data(String text, boolean visible) {
          this.text = text;
          this.visible = visible;
      }
      
      @Bindable
      public String getText() {
          return this.text;
      }
      
      public void setText(String text) {
          this.text = text;
          notifyPropertyChanged(BR.text);
      }
      
      @Bindable
      public boolean getVisible() {
          return this.visible ? View.VISIBLE : View.GONE;
      }
      
      public void setVisible(boolean visible) {
          this.visible = visible;
          notifyPropertyChanged(BR.visible);
      }
      }
      

      在您的 xml 文件中,您可以像这样添加它

       <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{data.text}"
              android:visibility="@{data.visible}"/>
      

      请不要在视图中执行您的 UI 逻辑,请在 MV 中执行。

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 2018-04-13
        • 1970-01-01
        相关资源
        最近更新 更多