[英]Android Studio 1.5.1 + Data Binding: Error messages in the IDE
我在Android Studio中挣扎着Android的数据绑定。 我在IDE中收到两条错误消息,我不知道如何解决这些错误: Cannot resolve symbol 'BR'
并且Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}
Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}
。
my.namespace
,package namespace.my.databindingtest
) dataBinding { enabled = true }
到app模块的build.gradle文件中(并进行了gradle同步) BaseObservable
的Data
类,其属性为text
(String)和visible
(Boolean) 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 (res / layout):
<?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);
}
}
在Data.java
文件中, BR
以红色突出显示,提示Cannot resolve symbol 'BR'
:
在activity_main.xml
文件中, @{data.visible ? View.VISIBLE : View.GONE}
@{data.visible ? View.VISIBLE : View.GONE}
以红色突出显示,提示Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}
Cannot resolve symbol @{data.visible ? View.VISIBLE : View.GONE}
:
那么我该如何解决这些错误呢?
我对BR符号有同样的问题。 我通过重新启动Android Studio“解决”它:/(我对Android和IntelliJ有点新鲜)在处理应该创建BR符号的@Bindable时,似乎有些事情失败了......
尝试将RelativeLayout更改为LinearLayout。 我也有问题让数据绑定准备好运行但我想我已经读过某个地方还没有支持RelativeLayout
在
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个步骤帮助我恢复:
您可以在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中执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.