我有一个 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);
}
}
}
所以我需要的是:
有一种方法可以让
ListView
在 subview 再次布局时不自动滚动到顶部在调用
ListView.setSelected()
后聚焦我的EditText
的方法或 3. 有另一种滚动ListView
的方法> 这不会清除EditText
的焦点。
对于选项
- 我已经尝试了
scrollTo()
和smoothScrollToPosition()
。scrollTo
出于某种原因有效但隐藏了ListView
中的某些项目(它们变得不可见,未加载)。smoothScrollToPosition()
创建一个动画,其中ListView
跳到顶部,然后将用户带回 Item(并执行 2 或 3 次)。
最佳答案
按照我的观点,如果你想使用 EditText
从 ListView
项目中获取输入,那么你应该使用 TextView
EdiText
并通过单击 TextView
您应该使用 EditText
打开并输入对话框,这是更简单和好的解决方案。在 ListView
中处理 EditText
焦点非常困难,您需要为此放置额外的 Listeners
。
或
如果您的 UI/UX 中的输入框数量有限,那么您可以使用 ScrollViews
实现 EditText
和 CustomListView
。
关于java - ListView 在 EditText 增长时滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478056/