【问题标题】:Databingding V2 and kotlin,I can not find my BR?Databinding V2和kotlin,我找不到我的BT?
【发布时间】:2018-03-28 04:19:53
【问题描述】:

昨天,我将我的 Android Studio 更新到了 3.1。所以我只能使用Databinding V2。我可以在Java中成功构建。但在Kotlin中失败。它告诉我Unresolved reference: BR

布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="mainViewModel"
            type="com.example.shao.myapplication.ViewModel" />
    </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="@{mainViewModel.title}"/>
    </LinearLayout>
</layout>

在 Java 中

public class MainActivity2 extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    binding.setVariable(BR.mainViewModel, new ViewModel());
}


public static int getMainBr() {
    return BR.mainViewModel;
}

}

在科特林中

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val mBinding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
    mBinding.setVariable(BR.mainViewModel, ViewModel())
}
}

【问题讨论】:

    标签: android data-binding kotlin


    【解决方案1】:

    Android 与 Kotlin 的数据绑定

    首先,在 Android Studio 中创建好 Android 项目后,我们需要将 Data Binding 和 Kotlin 的依赖添加到我们应用的 build.gradle 文件中。

    apply plugin: 'kotlin-android'                       
    apply plugin: 'kotlin-kapt'
    android {
    ....
    dataBinding {
        enabled = true
    }
    }
    dependencies {
    ...
    // notice that the compiler version must be the same than our gradle version
    kapt 'com.android.databinding:compiler:2.3.1'
    }
    

    首先我们需要创建一个模型。在这种情况下,一个基本的像 User.kt

    data class User(val name: String, val age: Int)
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    

        <variable
            name="user"
            type="com.kuma.sample.User"
            />
    </data>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.kuma.sample.MainActivity"
        >
    
        <TextView
            android:id="@+id/user_name_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="@{user.name}"
            tools:text="Name"
            />
    
        <TextView
            android:id="@+id/user_age_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="@{Integer.toString(user.age)}"
            tools:text="XX"
            />
    
    </LinearLayout>
    
     </layout>
    

    Kotlin 类

    package com.kuma.sample
    
     import android.databinding.DataBindingUtil
     import android.os.Bundle
     import android.support.v7.app.AppCompatActivity
     import com.kuma.kotlinsteps.databinding.ActivityMainBinding
    
     class MainActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    
        val user = User("Kuma", 23)
        binding.setVariable(BR.user, user)
        binding.executePendingBindings()
    }
    
    }
    

    解决错误

    enter code hereapply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
     android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    
    defaultConfig {
    applicationId "com.example.icarusud.recyclerviewtest"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled true
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
    }
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    
    //recyclerview
    compile "com.android.support:recyclerview-v7:24.1.1"
    
     //lastadapter
      compile 'com.github.nitrico.lastadapter:lastadapter:1.1.1'
    
    kapt "com.android.databinding:compiler:2.1.2"
    }
    repositories {
    mavenCentral()
    }
    
    kapt { generateStubs = true }
    

    根据下面的代码更改你的 gradle 设置试试这个代码它可以帮助你。

    【讨论】:

    • 对不起,我是第一次使用 StackOverflow
    • 你能解释一下究竟是什么导致了这个问题以及为什么你的版本有效吗?
    【解决方案2】:

    改变

    mBinding.setVariable(BR.mainViewModel, ViewModel())
    

    mBinding.mainViewModel=ViewModel()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 2020-09-11
      • 2019-10-21
      • 2012-03-23
      • 2020-11-18
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多