gpt4 book ai didi

android - TextInputEditText 在具有数据绑定(bind)的输入上卡住

转载 作者:行者123 更新时间:2023-12-05 00:06:23 24 4
gpt4 key购买 nike

我将 TextInputEditTextdatabinding 一起使用 - 直到最近它运行良好。这是出现此问题的布局之一:

            <android.support.design.widget.TextInputLayout
android:id="@+id/new_pass_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/new_pass_confirm_hint"
app:errorEnabled="true"
app:passwordToggleEnabled="true">

<android.support.design.widget.TextInputEditText
android:id="@+id/new_pass_confirm_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{viewmodel.enabled &amp;&amp; !viewmodel.progress}"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:maxLines="1"
android:text="@={viewmodel.newPassConfirm}"
android:textSize="18sp" />

</android.support.design.widget.TextInputLayout>

但现在每当用户尝试输入任何内容时,应用程序就会卡住并且 logcat 会一遍又一遍地被重复的消息淹没:

V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@ccaf106 nm : package.my ic=com.android.internal.widget.EditableInputConnection@87ca3c7
I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@e26ddb nm : package.my ic=com.android.internal.widget.EditableInputConnection@43b078
I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@4fff78e nm : package.my ic=com.android.internal.widget.EditableInputConnection@43ddbaf
I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
W/IInputConnectionWrapper: getCursorCapsMode on inactive InputConnection

如果我删除 android:text="@={viewmodel.newPassConfirm}" 问题就会消失 看起来问题出在 val newPassConfirm = ObservableField("")试图在无限循环中更改 xml 字段

直到几天前它都运行良好我试过的:

  • 删除 android:imeOptions="actionDone"

  • 删除 android:inputType="textPassword"

  • 从 View 层中删除了以下各项:

    binding.newPassConfirm.setOnClickListener(v -> binding.newPassConfirm.setError(null));

    binding.newPassConfirmEt.addTextChangedListener(new DefaultTextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
    binding.newPassConfirm.setError(null);
    }
    });

    binding.newPassConfirmEt.setOnEditorActionListener(
    (v, actionId, event) -> {
    if (actionId == EditorInfo.IME_ACTION_DONE
    || event.getAction() == KeyEvent.ACTION_DOWN
    && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
    mViewModel.onOkClick();
    return true;
    }
    return false;
    });

最佳答案

错误原因是DataBindingAdapter中的这个方法

@BindingAdapter("android:text")
public static void setText(TextView textView, String text) {
textView.setText(text != null ? text : "");
}

它可能会循环使用数据绑定(bind)代码,从而导致大量滞后

关于android - TextInputEditText 在具有数据绑定(bind)的输入上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53740401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com