繁体   English   中英

Android Studio 1.5.1 +数据绑定:IDE中的错误消息

[英]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}

这就是我做的:

  • 使用Android SDK Manager安装Android支持存储库(Rev。25)
  • Android Studio 1.5.1中创建了一个新项目:
    • 应用程序名称DataBindingTest (domain my.namespace ,package namespace.my.databindingtest
    • 对于手机和平板电脑 ,min SDK版本9,目标SDK版本23
    • 添加了空活动
  • dataBinding { enabled = true }到app模块的build.gradle文件中(并进行了gradle同步)
  • 添加了一个扩展BaseObservableData类,其属性为text (String)和visible (Boolean)
  • 更改了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 (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);
    }
}

这些是IDE中的错误:

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

截图Data.java

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个步骤帮助我恢复:

  1. 关闭Android Studio
  2. gradlew清洁
  3. 打开Android Studion和Build - >“Make Project”

您可以在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM