【问题标题】:Android Data binding : Cannot resolve symbolAndroid数据绑定:无法解析符号
【发布时间】:2015-12-25 06:13:29
【问题描述】:

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

应用模块的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);
    }
}

【问题讨论】:

  • 我用过同样的,它对我有用。请同步您的 gradle 构建
  • 仅供参考,rc2 提供了几个错误修复和对依赖注入的支持。

标签: java android data-binding gradle


【解决方案1】:

对我来说,我必须补充:

buildFeatures {
    viewBinding true
}

到我的build.gradle 文件,然后运行File-&gt;Sync Project With Gradle Files

【讨论】:

    【解决方案2】:

    我在任何地方都没有看到这个答案,所以我建议: 如果您通过单击“data”或“ui”之类的包从上下文菜单中添加了一些活动,Android Studio 会保存绑定路径,如下所示: 导入 com.damian.yourappname.ui.databinding.ActivitySearchBinding;

    我在以前的项目中对其进行了几次测试,并且仅在将诸如 ScrollingActivity 之类的示例活动添加到所有类的其他包的包中时才会发生这种情况。 导入 com.damian.yourappname.databinding.ActivitySearchBinding;

    所以最好的方法是在根文件夹中创建示例活动,并在 gradle 同步后移动到某个包

    【讨论】:

      【解决方案3】:

      在 build.gradle(:app) 上添加 viewBinding true

      android {
        buildFeatures {
              viewBinding true
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        要实现绑定,请确保:

        1. app.gradle中,启用dataBinding

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

           <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中,使用Binding

           val binding = XmlLayoutNameBinding.inflate(context.layoutInflater)
           // use the layout
          
        4. 如果无法解析XxxBinding 类(即使它可以解析XxxBindingImpl

          1. 首先尝试使用标记更改任何 XML 布局中的字符
          2. 如果这不起作用,重新启动Android Studio,同步并重建项目

        【讨论】:

          【解决方案5】:

          对于我的情况,我添加了:

                   dataBinding {
                            enabled=true
                   }
          

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

          【讨论】:

            【解决方案6】:

            如果clear ProjectRebuild Project 对您不起作用,请尝试简单的解决方案。当你从remote git branches克隆一个项目时它有时不起作用。你只需要关闭你的项目并删除你的android项目的.gradle.idea文件夹。然后重新打开项目。

            【讨论】:

              【解决方案7】:

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

              然后sync项目之后重新启动并清除缓存来自android studio中的文件。这样就解决了我的问题

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

                  1.在app gradle下面添加

                   dataBinding {
                          enabled = true
                      }
                  

                  2.在xml布局中写下代码

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

                  更新: 清理和重建项目

                  【讨论】:

                  • 不确定在清单上添加互联网权限可能与未找到自动生成的 BR 类有关。
                  • 互联网权限与数据绑定有什么关系?
                  【解决方案10】:

                  在您的 App Level build.gradle 文件中启用 dataBinding

                  android {
                      ...
                      dataBinding{
                          enabled=true
                      }
                  }
                  

                  【讨论】:

                  • 完成此操作后,您需要进入:文件 - 将项目与 Gradle 文件同步以同步 gradle 文件。
                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

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

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2016-06-23
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-05-24
                      • 2014-01-01
                      • 2018-05-03
                      • 1970-01-01
                      相关资源
                      最近更新 更多