java - ListView 在 EditText 增长时滚动到顶部

标签 java android listview android-edittext

我有一个 Listview,每个单元格中都有 EditTexts。每当我将文本添加到 EditText 增长 1 行的位置时,ListView 会滚​​动到顶部(并且通常会从 View 中删除 EditText这样做)。

我发现了一些关于此的问题,但它们似乎只有“黑客”作为答案,对我没有任何用处。

ListView scrolls to top when typing in multi-line EditText

Listview with edittext - auto scroll on "next"

编辑: 经过大量研究,我发现这是因为editText正在调整大小,导致ListView布局其 subview 然后重置到顶部。我想找到一种让 EditText 在保持不变的情况下增长的方法。

我尝试这个是因为我在网上找到了一个建议,但是,即使它使 ListView 保持在正确的高度,它也会清除 EditText 的焦点,我不能似乎用 requestFocus 找回了它。

private Stirng getTextWatcher(){
return new TextWatcher(){
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override public void afterTextChanged(Editable s) { 
listView.setSelection(index);
  }
 }
}

所以我需要的是:

  1. 有一种方法可以让 ListView 在 subview 再次布局时不自动滚动到顶部

  2. 在调用 ListView.setSelected() 后聚焦我的 EditText 的方法或 3. 有另一种滚动 ListView 的方法> 这不会清除 EditText 的焦点。

对于选项

  1. 我已经尝试了 scrollTo()smoothScrollToPosition()scrollTo 出于某种原因有效但隐藏了 ListView 中的某些项目(它们变得不可见,未加载)。 smoothScrollToPosition() 创建一个动画,其中 ListView 跳到顶部,然后将用户带回 Item(并执行 2 或 3 次)。

最佳答案

按照我的观点,如果你想使用 EditTextListView 项目中获取输入,那么你应该使用 TextView EdiText 并通过单击 TextView 您应该使用 EditText 打开并输入对话框,这是更简单和好的解决方案。在 ListView 中处理 EditText 焦点非常困难,您需要为此放置额外的 Listeners

如果您的 UI/UX 中的输入框数量有限,那么您可以使用 ScrollViews 实现 EditTextCustomListView

关于java - ListView 在 EditText 增长时滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478056/

相关文章:

java - 无法使用 gradle 安装库

android - 何时正确订阅 firebase 中的主题

c# - ListView 中选中项的颜色

Android - 延迟加载 ListView 的问题

Java 文件 IO 写入

java - 你能告诉我 "videoView.setVideoURI(uri);"、 "videoView.start();"有什么问题吗?

java - BluetoothServerSocket 不从 accept() 返回

android - 如何检查我的 ListView 何时完成重绘?

android - 警报对话框 android studio

android - 单击时更改 ListView 项的背景颜色