数据化--找不到BR类。

问题描述 投票:0回答:1

我正在使用android databinding,以[本帖][1]为指导。我意识到这不是针对androidx的数据绑定,但我的项目还没有使用androidx,但正在使用最新的android支持库。

无论如何,我的ViewModel扩展了BaseObservable。例如,我可以ctrl点击BR.stateText,然后我被导航到了genreated类,这个类是在 [app]\build\generated\ap_generated_sources\debug\com.android.databinding.library.baseAdapters\BR. 但是,当我去编译它时,IntelliJ似乎并不理解这个类的实际存在。

import android.databinding.BaseObservable;
import android.databinding.Bindable;
import com.android.databinding.library.baseAdapters.BR;

public class MyViewModel extends BaseObservable {

    public MyViewModel() {
        mStateText = "DEFAULT_TEXT_123";
    }

    @Bindable
    private String mStateText = null;

    public String getStateText() {
        return mStateText;
    }

    public void setStateText(String stateText) {
        mStateText = stateText;
        notifyPropertyChanged(BR.stateText);
    }
}

布局。


<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:bind="http://schemas.android.com/tools">

    <data>
        <variable
                name="viewModel"
                type="my.org.MyViewModel "/>
    </data>

...


        <Button
                android:layout_width="200dp" android:layout_height="wrap_content"
                android:layout_row="1" android:layout_column="1"
                android:id="@+id/system_state_btn"
                android:text="@{viewModel.stateText}"/>

Fragment:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        MainStatusBinding activityMainBinding = DataBindingUtil.setContentView(getActivity(), R.layout.main_status);
        activityMainBinding.setViewModel(new MyViewModel());
        activityMainBinding.executePendingBindings();

        View rootView = inflater.inflate(R.layout.main_status, container, false);
    ...
    ```
.

error: cannot find symbolimport com.android.databinding.libr.baseAdapters.BR; ^ symbol: class BR location: package com.android.databinding.libr.baseAdapters.


What is wrong with my setup that's causing IntelliJ to not recognize the class exists? Note, this fails for me when building on the commandline, so it's not specific to IntelliJ.

IntelliJ: 2020.1

Gradle wrapper: 6.3

android build tools: 28.0.3

android gradle plugin: 3.5.0

  [1]: https://www.journaldev.com/20292/android-mvvm-design-pattern
java android android-databinding
1个回答
0
投票

的,但我的项目还没有使用androidx,而是使用最新的android支持。BR 生成的类应该在你项目的根包里,你导入错了。另外 @Bindable 注释应该放在公共的getter上,而不是私人的backing字段。

© www.soinside.com 2019 - 2024. All rights reserved.