【发布时间】:2013-09-18 04:47:23
【问题描述】:
我有一个 ListView,在每个 listview 项中有一个不可见的 EditText 和一个可点击的 TextView。我正在尝试实现一种行为,即单击 TextView 将使 EditText 可见,专注于 EditText 并使软键盘自动出现。
我使用adjustResize 作为我的输入法而不是adjustPan,因为显然我正在测试该功能的S3 与adjustPan 发生了冲突。 (具体来说,当软键盘出现时,整个视图被推上去,这很好。但是,一旦我开始打字,整个视图就会滑回,好像软键盘不在那里一样!但它是!HTC不会出现问题一)。列表视图也有afterDecendents。
当列表视图有更多可以完全适应屏幕的项目时,会出现一个问题,即触发的软键盘对editText没有响应。
我使用imm.showSoftInput(holder.editText,0) 以编程方式触发软键盘,整个视图重新调整自身以适应软键盘。一旦显示了软键盘并且视图完成了重新布局,edittext 将不会接收除退格之外的所有键条目。这意味着我不能在编辑文本中添加任何单词或数字,但我可以删除它们,这很奇怪。
另一个有趣的事情是,我意识到如果我不以编程方式显示软键盘并让用户点击可见的编辑文本以显示软键盘,那么一切正常。 (这也让我感到困惑,因为我怀疑 listview 回收和聚焦机制是导致所有这些问题的原因。出现软键盘的地方会导致 listview 重新布局,因此会回收视图,因此会丢失对 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
【问题讨论】:
标签: android android-listview android-edittext android-softkeyboard