当前位置: 首页 > 知识库问答 >
问题:

文本输入编辑文本冻结在具有数据绑定的输入上

南门焱
2023-03-14

我正在将TextInputEditText数据库绑定一起使用-直到最近它都运行良好。这是出现此问题的布局之一:

            <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}”问题就不复存在了,似乎是因为试图在无休止的循环中更改xml字段

直到几天前,它还很好用。我试过了:

> < li>

删除< code > Android:ime options = " action done "

删除Android:输入类型=“文本密码”

从视图层中删除了以下每个:

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;
                });

共有2个答案

翁硕
2023-03-14

在XML中添加输入类型=“文本语音”解决了我的问题:

android:inputType="textPhonetic"

不确定哪种输入类型会导致此滞后。浪费了我的一天!

金健
2023-03-14

错误原因是DataBindingAdapter中的此方法

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

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

 类似资料:
  • 我是一个机器人初学者。我陷入了一个问题。我有三,我需要对它们进行验证。当我进行验证时,即使我在运行应用程序时没有输入任何值,EditText 也有一个值。为了检查哪个值是否存在,我使用 打印了这些值。 这是打印在日志中 这些价值观从何而来?请帮我解决这个问题。 提前感谢:)

  • 我正在开发一个Android聊天应用程序。一切运作良好,但除了一件事;我想设置一个布局的可见性消失,然后设置一个不同的布局可见时,用户开始输入编辑文本,就像在WhatsApp上实现的。但是我似乎想不明白。任何帮助都将不胜感激 基本上,我想做的是设置一个布局的可见性,该布局包含一个图像按钮,用于将图像上载到gone,然后显示一个布局,该布局包含一个图像按钮,用于在用户开始键入时将edittext中的

  • 我在我的文件中有这个代码,但是当在编辑文本中键入任何值并按下按钮时,相关的字符串不会打印。如何使其在按下按钮时,根据在编辑文本槽中输入的字符串显示特定文本?

  • 我想将文本从软键盘输入到popupwindow中的Edittext小部件,但我遇到了一些问题。我的活动是一个游戏卡桌,并在上面启用一些动画。在游戏表中,有一些按钮。如果玩家点击某个按钮,将显示一个弹出窗口。问题是播放器无法在弹出窗口中输入文本到Edittext。我发现了一些类似的问题,最流行的建议是: 使用此设置,我可以正常输入Edittext。但是,这将阻止主UI线程并导致停止游戏表中的动画。我

  • 可以输出文本。 用法 Your browser does not support the video tag. 案例:标签标签 功能:显示输入的字母。

  • 这是我的控制器: 我的观点是: 和VO类: