【发布时间】: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
- 添加了一个空活动
- 应用程序名称DataBindingTest(域
- 在应用模块的 build.gradle 文件中添加了
dataBinding { enabled = true }(并进行了 gradle 同步) - 添加了一个
Data类,它扩展了BaseObservable并具有属性text(字符串)和visible(布尔) - 更改了
activity_main.xml:包裹在layout标记中,添加了data部分并使用了data.text和data.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