Databinding:InputMethodManager:startInputInner-mService.startInputOrWindowGainedFocus

问题描述 投票:0回答:1

出于安全考虑,我正在使用setTextchar array版本,以避免使用String版本。

public final void setText (char[] text, 
                int start, 
                int len)

BindingAdapter:] >>

public class DataBindingAdapter {
    @BindingAdapter("android:text")
    public static void bindArrayInText(ClearableEditText view, char[] value) {
        if(value == null) return;
        Log.v("BindingAdapter", String.valueOf(value));
        view.setText(value, 0, value.length);
    }

    @InverseBindingAdapter(attribute = "android:text")
    public static char[] getArrayFromText(ClearableEditText view) {
        int length = view.getText().length();
        char[] password = new char[length];

        view.getText().getChars(0, length, password, 0);

        Log.v("BindingAdapter", String.valueOf(password));

        return password;
    }

}

仿真器行为:

] >>

但是问题是,当我在EditText中输入ABCD时,我显示了[[DCBA

,并且焦点始终停留在EditText的开头。

实际设备行为:

] >>仅显示第一个字符。

日志:

]
2020-02-04 17:37:43.760 4110-4110 / com.bla V / InputMethodManager:开始输入:tba = com.blaic=com.android.internal.widget.EditableInputConnection@3e6e221mNaviBarColor -16750956 mIsGetNaviBarColorSuccess true,NavVisible:true,NavTrans:false 2020-02-04 17:37:43.760 4110-4110 / com.blaD / InputMethodManager:startInputInner-ID:0 2020-02-04 17:37:43.7674110-4110 / com.bla I / InputMethodManager:startInputInner-mService.startInputOrWindowGainedFocus

出于安全考虑,我使用setText的char数组版本来避免使用String版本。 public final void setText(char [] text,int start,int len)...

@BindingAdapter("android:text") public static void setCharArray(EditText view, char[] value) { if(value == null) return; int length = view.length(); char[] password = new char[length]; view.getText().getChars(0, length, password, 0); if (Arrays.equals(value, password)) { Log.v("BindingAdapter out" + view.getId(), String.valueOf(value)); view.setText(value, 0, value.length); } }
android android-edittext android-databinding
1个回答
0
投票
@BindingAdapter("android:text") public static void setCharArray(EditText view, char[] value) { if(value == null) return; int length = view.length(); char[] password = new char[length]; view.getText().getChars(0, length, password, 0); if (Arrays.equals(value, password)) { Log.v("BindingAdapter out" + view.getId(), String.valueOf(value)); view.setText(value, 0, value.length); } }
© www.soinside.com 2019 - 2024. All rights reserved.