【问题标题】:Two-way data binding Converter双向数据绑定转换器
【发布时间】:2020-01-08 11:01:26
【问题描述】:

我正在尝试为我的password 双向数据绑定字段使用从 CharArray 到 String 的转换器。

var password = ObservableField<CharArray>()

关注doc

public class Converter {
    @InverseMethod("stringToCharArray")
    public static String charArrayToString(
            ClearableEditText view,
            char[] oldValue,
            char[] value
    ){
        return value.toString();
    }

    public static char [] stringToCharArray(
            ClearableEditText view,
            String oldValue,
            String value
    ){
        return value.toCharArray();
    }
}

在 XML 文件中我这样使用它:

android:text="@={Converter.charArrayToString(viewModel.password)}"

但我仍然得到以下异常:

error: Could not find inverse method: public static char[] stringToCharArray(ClearableEditText, char[], java.lang.String)
    public static String charArrayToString(
                         ^   

【问题讨论】:

    标签: android android-viewmodel two-way-binding


    【解决方案1】:

    这对我来说很好,也许在重新启动 AS 之后:

    public class Converter {
        @InverseMethod("toCharArray")
        public static String toString(char [] value) {
            if(value == null) return "";
            return value.length == 0 ? "" : String.valueOf(value);
        }
    
        public static char [] toCharArray(String value) {
            if(value == null) return "".toCharArray();
            return value.isEmpty() ? "".toCharArray() : value.toCharArray();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您必须提供BindingAdapterInverseBindingAdapter 用于双向数据绑定。尝试使用下面的绑定适配器。

      @BindingAdapter("android:text")
      public static void bindArrayInText(TextView view, char[] value) {
          view.setText(String.valueOf(value));    
      }
      
      @InverseBindingAdapter(attribute = "android:text")
      public static char[] getArrayFromText(TextView view) {
          String value = view.getText().toString();
      
          return value.toCharArray();;
      }
      

      并使用喜欢

      android:text="@={viewModel.password}"
      

      【讨论】:

      • @Chulo,你检查了吗?
      • 对不起,我不会使用这种方法。但无论如何我让转换器工作。谢谢!
      • 能否请您添加转换器,以便我学习?
      • 检查我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2013-02-24
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多