web-dev-qa-db-ja.com

Androidデータバインディング:シンボルを解決できません

Androidスタジオでベータ機能(データバインディング)を使用しようとしました。Androidスタジオからのガイドに従って、関連するクラスを見つけることができますAndroidスタジオ内の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);
    }
}
13
Long Ranger

App Level build.gradleファイルでdataBindingを有効にします

Android {
    ...
    dataBinding{
        enabled=true
    }
}
35
Kishore Kittu

同じ問題がありました。私は段階的な設定、クリーニング、再構築を掘っていました...何も機能しませんでした。最終的に私がしなければならなかったのは再起動でしたAndroid Studio

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

この記事の執筆時点では、この統合を開始するには少しのジャンプスタートが必要です。タグを追加した後にListItemCrimeBindingを使用可能にするには、Android Studioを再起動してからプロジェクトを再構築する必要があります。

18
tenprint

ダイアログがポップアップしたら同期をクリックするか、保存の横にある同期ボタンを押すか、Android Studio。

1
Ethan Reinsch

バインディングを実装するには、次のことを確認してください。

  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を解決できる場合でも)restart Android Studio、プロジェクトの同期と再構築

0
Eric