Android数据绑定:无法解析符号

时间:2015-09-28 04:15:24

标签: java android data-binding gradle

我试图在android studio中使用beta功能(数据绑定)。按照android studio的指南,我可以在android studio中找到相关的类DataBindingInfo。但是在创建项目之后,数据绑定类不会生成。有人可以帮忙吗?

app模块的build.gradle

apply plugin: 'com.android.application'

apply plugin: 'com.android.databinding'
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.pigfamily.myapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

项目的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        dependencies {
            classpath "com.android.tools.build:gradle:1.3.0"
            classpath "com.android.databinding:dataBinder:1.0-rc1"
        }
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="user"
            type="com.example.pigfamily.myapplication.User" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
 >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}" />

    </LinearLayout>
</layout>

MainActivity.java

package com.example.pigfamily.myapplication;

import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityMainBinding //cannot resolve the symbol here
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

8 个答案:

答案 0 :(得分:30)

App Level build.gradle文件

中启用dataBinding
android {
    ...
    dataBinding{
        enabled=true
    }
}

答案 1 :(得分:15)

我有同样的问题。我正在挖掘gradle设置,清理,重建......没有任何效果。最后我要做的就是重启Android Studio

https://www.bignerdranch.com/blog/descent-into-databinding/

  

在撰写本文时,这种集成需要一点启动才能获得   去。在添加后使ListItemCrimeBinding可用    标记,你必须重新启动Android Studio,然后重建   项目

答案 2 :(得分:1)

如果弹出对话框,请单击同步,点击保存旁边的同步按钮,或重新启动Android Studio。

答案 3 :(得分:0)

要实现绑定,请确保:

  1. app.gradle中,启用dataBinding

    apply plugin: 'com.android.application'
    ...
    
    android {
        ...
        dataBinding {
            enabled = true
        }
        ...
    }
    
    dependencies {
        ...
    }
    
  2. 将现有XML布局包装在<layout>元素中:

    <layout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
    
        <!-- note: xmlns above only needed if used in original XML -->
        <!-- original XML here -->
    
    </layout>
    
  3. Activity / Fragment中,使用绑定

    val binding = XmlLayoutNameBinding.inflate(context.layoutInflater)
    // use the layout
    
  4. 如果无法解析XxxBinding类(即使它可以解析XxxBindingImpl重新启动Android Studio ,同步并重建项目

答案 4 :(得分:0)

就我而言,我的布局文件有一些错误,因此AS未创建绑定类。我可以通过期待XML文件并查看错误消息来找到它。

答案 5 :(得分:0)

确保在build.gradle中添加数据绑定

,然后在重启项目并从android studio中的文件中重新启动并清除缓存。这样可以解决我的问题

答案 6 :(得分:0)

对于我来说,我添加了:

         dataBinding {
                  enabled=true
         }

然后转到“文件”>“设置”> Gradle>取消勾选离线工作>申请> 好 然后清理我的项目。

答案 7 :(得分:-1)

1。在应用gradle中添加以下内容

<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
  <data></data>
</layout>

2。在xml布局中,编写以下代码

  <uses-permission android:name="android.permission.INTERNET"/>

3。最重要,因为未生成数据绑定。互联网权限

在清单中添加以下代码

node0(local)<->node1  
node0(local)<->node2
...
but not:
node1<->node2
...

已更新: 清洁并重建项目