小编Dan*_*nce的帖子

EditText中的双向数据绑定

我有这个对象

ObservableInt someNumber;

public ObservableInt getSomeNumber()
{
    return someNumber;
}

public void setSomeNumber(ObservableInt number)
{
    this.someNumber = number;
}
Run Code Online (Sandbox Code Playgroud)

我的AppCompatEditText在xml代码中是这样的:

<android.support.v7.widget.AppCompatEditText
        android:layout_width="0dp"
        android:layout_height="@dimen/agro_item_height"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:text="@={String.valueOf(myObject.someNumber)}"
        android:gravity="center_horizontal"/>
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
java.lang.RuntimeException: failure, see logs for details.
cannot generate view binders java.lang.NullPointerException
at android.databinding.tool.expr.MethodCallExpr.generateCode(MethodCallExpr.java:69)
at android.databinding.tool.expr.Expr.toFullCode(Expr.java:745)
at android.databinding.tool.expr.Expr.assertIsInvertible(Expr.java:767)
at android.databinding.tool.BindingTarget.addInverseBinding(BindingTarget.java:68)
at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:228)
at android.databinding.tool.DataBinder.<init>(DataBinder.java:52)
at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:83)
at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:168)
at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149)
at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82)
at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154)
at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139)
at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) …
Run Code Online (Sandbox Code Playgroud)

android android-databinding

11
推荐指数
3
解决办法
2万
查看次数

Android数据绑定中如何使用对象方法?

假设我有这个对象:

public class Field
{
   List<String> list;
   public Field()
   {
     list = new ArrayList();
   }
   public boolean isOnTheList(String someText)
   {
     return list.contains(someText);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在具有这种绑定的xml上使用此功能。

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

<data>

    <import type="android.view.View"/>

    <variable
        name="field"
        type="com.greendao.db.Field"/>        

    <variable
        name="user"
        type="com.package.User"/>
</data>

<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"    
    android:visibility="@{field.isOnTheList(user.name)?View.VISIBLE:View.GONE}"
    tools:context=".advisor.new_visit_report.activities.FieldsSelectionActivity"> ...
Run Code Online (Sandbox Code Playgroud)

问题是那不起作用。有人已经尝试过了吗?

android android-databinding

7
推荐指数
1
解决办法
4847
查看次数

Android数据绑定双向转换方法

我有这个名为Item的对象

public class Item extends BaseObservable
{

    private double dose;
    private Integer reportedDose;

    @Bindable
    public double getDose() {
        return dose;
    }

    public void setDose(double dose) {
        this.dose = dose;
        notifyPropertyChanged(BR.dose);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在关注@GeorgeMount上一篇教程:https://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873 我添加了Converter类:

public class Converter
{
    @InverseMethod("toDouble")
    public static String toString(TextView view, double oldValue,
                                  double value) {
        NumberFormat numberFormat = getNumberFormat(view);
        try {
            // Don't return a different value if the parsed value
            // doesn't change
            String inView = view.getText().toString();
            double parsed =
                    numberFormat.parse(inView).doubleValue();
            if (parsed …
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding

2
推荐指数
1
解决办法
2470
查看次数