繁体   English   中英

表达式不能倒置,因此不能用于双向绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM