0

Android プロジェクトの 1 つでデータ バインディングを実装しようとしています。ネットで完全に機能する例を見つけることができなかったので、 http://developer.android.com/tools/data-binding/guide.htmlに従って手順を開始しました。

私のファイルのコードは次のとおりです。

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:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

build.gradle (モジュール)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "org.my.anddatabind"
        minSdkVersion 18
        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'])
    compile 'com.android.support:appcompat-v7:23.1.1'
}

MainActivity.java

package org.my.anddatabind;

import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import org.my.anddatabind.databinding.MainActivityBinding;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
        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;
    }

    @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);
    }
}

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
    <variable name="user" type="com.my.anddatabind.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>

ユーザー.java

package org.my.anddatabind;

public class User {
    public final String firstName;
    public final String lastName;
    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

プロジェクトをビルドすると、次のエラーが発生します。

****/ データ バインディング エラー ****msg: ユーザーの型を解決できません ~ ファイル:C:\Users\xxx\AndroidStudioProjects\AndDataBind\app\src\main\res\layout\main_activity.xml loc:11: 24 - 11:27 ****\ データ バインディング エラー ****

また、MainActivity.java の setUser(user) はエラーを示します: setUser('org.my.anddatabind.User') in '' cannot be applied to '(org.my.anddatabind.User)'

4

1 に答える 1

1

クラスのパッケージ名を確認してください。「ユーザー」クラスのパッケージ名は

org.my.anddatabind.User

しかし、xmlではタイプを次のように定義しています

<data>
  <variable name="user" type="`com.my.anddatabind.User`"/>
</data>

すなわち

com.my.anddatabind.User
于 2016-03-04T06:37:58.117 に答える