Android Studio 2.0 Preview 4を使用しています。Android SDKツール25 rc1を使用しています。 。File-> Invalidate Caches and restartも機能せず、データバインディングの最も基本的な例を実行することはできません。
build.gradleファイル
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.chiragshenoy.myapplication"
minSdkVersion 15
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'
compile 'com.Android.support:design:23.1.1'
}
MainActivity.Java
package com.example.chiragshenoy.myapplication;
import Android.databinding.DataBindingUtil;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.view.Menu;
import Android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainActivity binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);
}
@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;
}
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.chiragshenoy.myapplication.User"/>
</data>
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{user.firstName}"/>
<TextView Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
これは私のトップレベルのbuild.gradleファイルです
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.0.0-alpha3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
あなたのgradleバージョンが問題ない場合(1.5+)、これを試してください:
これで問題が解決する場合があります。知らせて下さい。
以下を使用する必要があります。
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
OnCreateで
MainActivityは、生成されたBindingクラスではありません。
私はFelipe GualbertoのAnswer に基づいて考えたところ、解決策の違いが得られました。
同じidで異なる[〜#〜] xml [〜#〜]で複数のビューを記述した場合次に一意にします。
ありがとうございました。
私が使用する最も速いハックの1つは、xmlファイルの名前を変更することです。
例えば.
abc_layout.xml
の名前をabc_layout2.xml
に変更します。バインディングインポートでエラーが表示されたら、abc_layout.xml
に名前を変更します。
名前を変更するショートカットはshift + F6
です。プロジェクト全体の再構築がより迅速になります。ただし、これは1つのファイルからエラーを削除するだけです。
デフォルトでは、Binding
クラスがレイアウトファイルの名前に基づいて生成され、Pascalケースに変換され、「Binding」という接尾辞が付けられます。上記のレイアウトファイルはmain_activity.xmlであったため、生成クラスはMainActivityBindingでした。問題は、バインディングクラスを手動で作成しようとしていることです。
このクラスは、レイアウトプロパティ(ユーザー変数など)からレイアウトのViews
へのすべてのバインディングを保持し、バインディング式に値を割り当てる方法を知っています。バインディングを作成する最も簡単な方法は、膨らませながら行うことです。 Android Studio。
最上位のBuild.Gradleファイルでは、gradle 1.5.0以降を使用します
dependencies {
classpath 'com.Android.tools.build:gradle:1.5.0'
}
1.5.0より低い場合は、これを最上位のgradleファイルでも使用します
classpath "com.Android.databinding:dataBinder:1.0-rc4"
キャッシュを無効にする/ファイルから再起動するだけです。これは私のために働いた。
これを行う
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
の代わりに
MainActivity binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
バインディングクラスの名前を確認します。ここではActivityMainInitBindingはxmlファイルactivity_mail_init.xmlに基づいて生成されます。間違ったクラスを使用すると、エラーがポップアップします。
val binding : ActivityMainInitBinding=
DataBindingUtil.setContentView(this, R.layout.activity_main_init)
既存のプロジェクトをAndroidXに移行する の後にも同じ問題が発生し、以下のことを行うことで解決します
Build -> Clean Project
Build -> Rebuild Project
その後
File -> Invalidate Caches/Restart...