[英]The expression cannot be inverted, so it cannot be used in a two-way binding
我正在尝试在我的项目中实现双向绑定。
但是在布局中使用条件语句时出现错误。
我创建了模型类 model.java,其中定义了 getter setter。
模型.java
public class Model {
public String name;
public string id;
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.name = website;
}
public int getId() {
return name;
}
public void setId(String id) {
this.id = id;
}
}
fragment_details.java 中的编辑文本
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".view.fragment.CompanyDetailsFragment">
<data>
<variable
name="modelData"
type=".Model" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={modelData.id}"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:text="@={modelData.website ?? "NA"}"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
详细信息Fragment.java
public class DetailsFragment extends Fragment {
FragmentDetailsBinding binding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
binding =DataBindingUtil.inflate(inflater,R.layout.fragment_details,null,false);
View view = binding.getRoot();
MyAccountDetailsViewModel viewModel = ViewModelProviders.of(this).get(MyAccountDetailsViewModel.class);
getDetails();
return view;
}
private void getDetails() {
//Server call and set value to user
binding.setUser(detailsByUser);
}
private void updateDetails() {
Log.d("newData", binding.getUser() + "");
}
}
我想要双向绑定,以便我可以更新用户详细信息。 但我收到以下错误消息
aWebsiteJavaLangObjectNull) ? ("NA") : (userDataWebsite)) cannot be inverted, so it cannot be used in a two-way binding
尝试使用您的modelData.website
变量作为 Observable 或 MutableLiveData,默认值为“NA”,然后将变量绑定到您的 xml,如下所示:
xml绑定
android:text="@={modelData.website}"
可观察的Java
public ObservableField<String> website = new ObservableField<>();
之后,只需根据需要将您的值设置为网站。
希望这有帮助,祝你好运!
有一个类似的消息,但使用的是 Kotlin,在这里修复它的方法是使用var
而不是val
作为我正在使用的数据类中的绑定值。 希望这可以帮助某人……
如果你想双重绑定,你可以使用@+{...} ,双重绑定必须授予该值是唯一的,如果字段的值不唯一,请尝试@{...},删除'+'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.