android - 在 Listview 中模拟用户对 EditText 的触摸操作

标签 android android-listview android-edittext android-softkeyboard

我有一个 ListView,在每个 ListView 项中都有一个不可见的 EditText 和一个可点击的 TextView。我正在尝试实现一种行为,点击 TextView 将使 EditText 可见,专注于 EditText 并使软键盘自动出现。

我正在使用 adjustResize 而不是 adjustPan 作为我的输入法,因为显然我正在测试该功能的 S3 与 adjustPan 一起疯狂。 (具体来说,当软键盘出现时,整个 View 都会被推上去,这很好。但是,一旦我开始打字,整个 View 就会向下滑回,就好像软键盘不存在一样!但它确实存在!HTC 没有出现问题一)。 ListView 也有 afterDecendents

当 listview 有更多项目可以完全适合屏幕时,会出现触发的软键盘不响应 editText 的问题。

我使用 imm.showSoftInput(holder.editText,0) 以编程方式触发软键盘,整个 View 重新调整自身以适应软键盘。一旦显示软键盘并且 View 完成重新布局,除退格键之外的所有键条目都不会被 edittext 接收。这意味着我不能向 edittext 添加任何单词或数字,但我可以删除它们,这真是太奇怪了。

另一件有趣的事情是,我意识到如果我不以编程方式显示软键盘并让用户点击可见的编辑文本以显示软键盘,那么一切正常。 (这也让我感到困惑,因为我怀疑 listview 回收和聚焦机制是导致所有这些问题的原因。出现软键盘的地方会导致 listview 重新布局,从而导致 View 回收,因此对 editText 的引用丢失等)

所以,最终,我的问题是,有没有什么方法可以让我可靠地以编程方式模拟用户点击可见编辑文本,以便我可以触发一个软键盘,该软键盘可以与“点击”的编辑文本一起正常工作?

我也尝试过以下方法,但它不能可靠地工作(有时有效,有时无效。玩延迟持续时间没有任何作用。)。

holder.editText.postDelayed(new Runnable(){
    @Override
    public void run() {
         holder.editText.requestFocus();
         holder.editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
         holder.editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
         }
}}, 500);

我从许多 SO 问题中尝试过的其他答案排列也没有真正可靠地工作。 示例问题: How to show soft-keyboard when edittext is focused , How come the Android soft keyboard is not responding to EditText? , Android: Dialog box show soft keyboard automatically when focus is on an EditText not working

最佳答案

问我有什么方法可以可靠地以编程方式模拟用户点击可见的编辑文本

这样我就可以触发与“点击”编辑文本一起正常工作的软键盘?

是的,

当你想模拟你对 EditText

的点击时添加这个
          editText.performClick();    //softkeyboard will open
          editText.setPressed(true);  // edittext will get highlighted
          editText.invalidate();        //Invalidate the whole view

完成!!

关于android - 在 Listview 中模拟用户对 EditText 的触摸操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864057/

相关文章:

android - 以编程方式检查 Play 商店的应用更新

android - 文字碰到按钮

android - 为 Android 应用程序重置 TextView 在 Listview 行中的位置

android - 将方形图像裁剪为圆形 - 以编程方式

ListView 和远程数据库中的 java.lang.NullPointerException

android - 自定义 ListView 不显示

java - 如何通过选择微调器来启用或禁用 editText

android - 我们可以更改 edittext 默认 "Paste"弹出窗口的语言吗?

android - Android 中的电话键盘和 Qwerty 键盘

Android Studio 正在为 3 个月大的 react-native 项目生成非常旧的 apk