我正在使用android数据绑定,以这篇文章为指南。我知道它的目标不是androidx数据绑定,但我还没有在我的项目中使用androidx,而是在使用最新的android支持库。
不管怎样,我让我的ViewModel扩展了BaseObservable。正在生成BR类,并且显示正确。例如,我可以按住Ctrl键并单击BR.stateText,然后导航到[app]\build\generated\ap_generated_sources\debug\com.android.databinding.library.baseAdapters\BR
中的genreated类。但是,当我去编译它的时候,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}"/>
片段:
@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);
...
```
.
错误:找不到符号导入包^符号:类BR位置:包com.android.databinding.library.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
发布于 2020-05-14 23:00:57
生成的BR
类应该位于项目的根包中,您导入了错误的包。另外,@Bindable
注释应该放在公共的getter中,而不是私有的支持字段中。
https://stackoverflow.com/questions/61796884
复制相似问题