【问题标题】:Databinding BR not showing all variable name数据绑定 BR 未显示所有变量名
【发布时间】:2026-01-06 12:10:02
【问题描述】:

我已经用 MVVM 模式实现了 DataBinding,这是我的 ViewModel 类。

public class MainViewModel extends BaseObservable {
    private String data, data1;

    @Bindable
    public String getData1() {
        return data1;
    }

    public void setData1(String data1) {
        this.data1 = data1;
    }

    @Bindable
    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
        notifyPropertyChanged(BR.data);
    }
}

现在的问题是我可以在那里看到BR.data,但无法获得BR.data1,如何将notifyPropertyChanged() 用于data1 变量。

我尝试清理项目,也尝试重建它,但没有帮助。

这是我的build.gradle 文件

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    dataBinding {
        enabled = true
    }

    defaultConfig {
        ...
        ...
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'

}

【问题讨论】:

  • 您可以发布您的gradle 文件吗?并尝试Invalidate Caches and Restart
  • 但这是关于 BR 类的,我对 BR 类没有任何错误,只是没有显示所有变量。还是让我试试Invalidate Caches and Restart
  • 您是否尝试使用BR.data1 来查看它是否可以编译。 (可能是工作室的错误)
  • @yigit 是的,我猜它的工作室错误

标签: android data-binding android-databinding android-mvvm


【解决方案1】:

我找到了一些解决这个问题的方法。

1) 在 android studio 中尝试使用Invalidate caches and restart
2)正如yigit所提到的,这是android studio的bug,你可以直接使用变量而不是等待变量名来作为建议。

【讨论】:

    【解决方案2】:

    我已尝试以下操作,现在可以使用:

    1。 将 BR 的导入更改为 导入 com.android.databinding.library.baseAdapters.BR;

    2.file->使cahces/restart无效

    【讨论】:

      【解决方案3】:

      我可以确认@jee 状态的工作原理。 但是如果使用 androidx,import 语句会变成:

      import androidx.databinding.library.baseAdapters.BR
      

      无效不是 100% 需要的。我刚刚清理并重建了我的引用以再次工作。

      我确信这是 @yigit 提到的 Studio 错误,但没有任何错误报告证实这一点。

      【讨论】:

        【解决方案4】:

        AndroidX 来了

        所以,您只需要更改您的导入来源

        import your_package_name.BR
        

        下面的代码

        import androidx.databinding.library.baseAdapters.BR
        

        另外,检查你的生命周期库新版本

        implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
        

        【讨论】:

          最近更新 更多